記事"MQL5プログラミングベージックス:リスト"についてのディスカッション

 

新しい記事 MQL5プログラミングベージックス:リスト はパブリッシュされました:

トレーディング戦略開発のためのプログラミング言語の新バージョン、MQL5は、以前のバージョン、MQL4と比較してより強力で効果的な機能を提供しています。その利点は本質的にオブジェクト指向プログラミングの機能にあります。この記事は、ノードやリストなど複雑なカスタムデータ型を用いることについて詳しく見ていきます。また、MQL5での実際的なプログラミングにてリストを用いる例を紹介します。

作者: Dennis Kirichenko

 

素晴らしい記事をありがとう!

 
Кроме узла для односвязного списка есть ещё другие. Пожалуй, самым популярным является узел для двусвязного списка.

のような不完全なアイデアだ。

つまり、二重リンク・リストのノードの能力は、前のノードへのポインタを処理する必要があることを除けば、単一リンク・ノードの能力と同じようなものになります。

シングル・リンク・ノードの能力を持つためには、前のノードへのポインタを 処理する必要があるの だろうか?筆者が伝えたいことは伝わっているが、表現自体があまりよくない......。

図.3 リング型バイリンクリストのノード

1) 一番上のポインタ - 矢印が少し曲がっている

2) これは記事のスタイルかもしれないが、図の説明が非常に小さなフォントで、かなり薄暗い目が悪いという個人的な意見)

このような2重リンク・リストのニーズに応えるノードも必要です。 前の 形とは異なり、前の ノードを参照する別のポインタを保持します。 そして当然ながら、 リストの先頭要素の このような ノードはNULLに等しくなります

1)前の形式から - 何から、どのくらい前から?筆者の言うpreviousとは「単一リンクリストのノード」のこと なのだろうか

2) リストの先頭 要素のノードは NULLに 等しくなる」。 ノードかポインタか?おそらく、先ほどの「リストには要素ではなくノードを格納することができる:

「二重にリンクされたリストの 先頭ノードのポインタの 1 つは NULLに等しい

しかし、末尾のノードでは、次のノードへのリンクは 空ではなく、先頭のポインターで満たされるから だ。

1)参照は 存在しない- 誰が、何を ?のケースは成立しない。

2) しかし、最後尾のノードでは、次の空(who-what ?????)への 参照は ない

3)それ(参照)はインデックスで埋められる。 リンクはポインターによって埋められるのか、それともポインターはまだどこかで参照を持っているのか?

削除操作については追加操作と ほぼ同じです

  • 先頭ノードを削除;
  • 末尾のノードを削除する;
  • リストの指定された場所からノードを削除します;
  • デストラクタ。

1)これらは addグループの類似の (誰が何を?)ものと 実質的に 重複して いる。

2)指定されたリストの位置からノードを 削除することは、「先頭のノードを削除する」「末尾のノードを削除する」ことの一般的なケースではないか。

3) 削除操作について 」、その前は「追加操作の方法として次のようなものがある」(theremethods, hereoperations - 同じ形式が欲しい)。

これは、まさにこのような記事の導入部分が作られた無知な人間の、導入部分についての個人的な意見である。

 
気に入ったよ。ありがとう。読んだ後に、自分のところで応用できるようなアイディアが浮かぶといいよね。)
 
tol64:
気に入ったよ。ありがとう。読んだ後に、自分のところで応用できるようなアイディアが浮かぶといいよね。)
tol64 、権威あるご意見ありがとうございました:-)
 
2ALXIMIKS: プログラミングの文献をまだ読んでいないようだが...。 一般的に、 あなたの側からは口うるさい...。
 
denkir:
tol64 さん、 、権威ある専門家のご意見ありがとうございます :-)。
私は自分のことを専門家だとは思っていないし、権威だとも思っていない。そして、それは謙遜からではなく、本当にそうなのです。)))ここには、プログラミング、数学、トレードにおいて何倍も経験豊富なプログラマーがいる。そして私はまだ泳いで泳いで泳がなければならない。)))
 
tol64:
私は自分のことを専門家だとは思っていないし、権威だとも思っていない。それは謙遜からではなく、本当にそうなんだ。)))ここには、プログラミング、数学、トレードにおいて何倍も経験豊富なプログラマーがいる。そして私はまだ泳いで泳いで泳がなければならない。)))

権威とは 主観的なものだと思います。ある国の主権を他の国が認めるようなものだ...。

引用

権威とは、優れた業績、知識、技術、能力、社会における 特別な地位などを、その主体(キャリア)が認めることである。

ということは、あなたのは私が認めたということですね :-)

tol64、あなたの新しい記事を待っています。

Авторитет — Википедия
  • ru.wikipedia.org
Авторитет (нем.  , от лат.   — «власть, влияние») — в общем смысле: значение и основанная на значении или с ним соединённая власть; в узком — влияние умственное, побуждающее уважение, доставляемое обладанием превосходной и признанной власти или выдающейся и признанной мудрости, знания, добродетели. Влияние индивида, основанное на занимаемом им...
 
次のブロック(例4)では、リストのようなデータ・コンテナの主な欠点のひとつ、要素へのアクセス速度に注目することを提案する。ポイントは、リストの要素へのアクセスは線形であるということです、 а в случае со списочным классом CList - бинарно, что немного уменьшает трудоёмкость алгоритма.
線形検索ではO(N)、バイナリ検索ではlog2(N)の労働集約度を持つ。
線形探索ではO(N)、バイナリ探索ではlog2(N)の労働集約度を持つ。

、データセットの要素にアクセスする例を示す:


log2(N)の複雑さでCList要素へのバイナリアクセスをどこで見つけたのですか?

CListはリストであり、log2(N)の複雑さを持つバイナリ・アクセスは、インデックスCurrentIndex +/- (CurrentIndex/2)のノードへの瞬間的なジャンプを必要とします。

CListの実装では、標準のQuickSearch()を使用しており、ソートの場合、確かにCurrentIndex +/- (CurrentIndex/2)ノードを参照して項目を検索します。しかし、このノード自体はGetNodeAtIndex()関数によって検索され、奇跡は起こらない。アクセス操作の複雑さはすべてこの関数、特にこれらの文字列にかかっている:

if(revers)
     {
      //--- 右から左へ検索
      for(;i>index;i--)
        {
         result=result.Prev();
         if(result==NULL)
            return(NULL);
        }
     }
   else
     {
      //--- 左から右へ検索
      for(;i<index;i++)
        {
         result=result.Next();
         if(result==NULL)
            return(NULL);
        }
     }

これを見ると、ある要素を検索する複雑さは、極限ではO(N/2) であることがわかる。なぜなら、リストは双方向なので、端から端へのアクセスはN/2の遷移を超えないからである。著者は、このアルゴリズムについて記事を書く前に、もっと徹底的に理解することをお勧めする。

私自身の経験から言えることは、データを扱うということは、ほとんどの場合、検索やソートと結びついているので、実際のタスクに古典的なCListを 使うのは非効率的だということだ。リストは、インデックスによるアクセスとリストによるアクセスが組み合わされたコレクションでは、まず強い。

なぜか、ポインタ遷移がインデックスによる直接アドレス指定よりもずっとずっと遅いという事実を考える人はほとんどいない。result.Next()を1000回通過するのは、forでインデックスを1000回通過するよりもはるかに遅い。

 
denkir:

昏睡状態。

画像から始める。ポインターはデータではなくノードに行き、データはノードの一部でしかない。

テキストは、公正を期すために、ほとんど正常です。

実装について。そのようなものはテンプレートによって実装される。STLにおけるコンテナの最適な表現方法は、イテレータとファンクタであるが、ここでは失敗である。

その結果、空っぽの仮想メソッドは理解できないだけでなく、ただのヴリヴィグラズに見えてしまう。)シートの並べ替えが実現した。いくつかのメソッドの実装や宣言にさえ疑問があり、当惑さえする。

カプセル化ゼロ。

リスト(! gg)での複雑さとバイナリ(!)サーチについての暴露は終わった。

その結果、現在のEVERYTHINGは理解不能で不便ながらくたであり、学習のための例としてさえ使えない(と思う)。

プログラマーになりたいのなら、普通にプログラミングを学びましょう。その方が、ずっとうまく実装できる。

C-4:

リストが双方向なので、一方の端から要素にアクセスしてもN/2の遷移を超えることはない。著者はこのアルゴリズムについて記事を書く前に、もっと徹底的に理解した方がいいだろう。

上に書いたOというのは、第一に計算が間違っており、第二に書いてあることも間違っている。

_____________________________________

最も興味深いのは、これが最悪のリソース記事とは程遠いということだ。

 
TheXpert:

...

悪気はないのだが)プログラマーになりたいのなら、普通にプログラミングを学ぼう。その方がずっとよく理解できる。

あなたはまた、あなたの記憶をリフレッシュすることをお勧めします、O、上に書かれていることは、第一に、間違って計算され、第二に、間違って書かれています。

...

私はあなたにも同じことを望む。見て、あなたは選ばれた人のコホートに入るでしょう))。