定義された要素の配列をクリアする。 - ページ 29 1...222324252627282930 新しいコメント Nikolai Semko 2018.11.19 22:41 #281 Sergey Dzyublik: 基本的には、静的なHashSetデータ構造を使用して、衝突を解決するためのデータの初期配列があります。 ただ、実装は目を見張るものがありますね...。 100〜500個の不要なパラメータを持つ関数("FindValueInSortArray")を呼び出す代わりに、通常はクラスを使用し、これらのパラメータはクラスのフィールドとして機能します(コンパイラが暗黙のインライン化を推測しなかった場合、パラメータの受け渡しで 利益を得ます)。 同じサイズで同じ用途の配列の組(int p1[]; int p2[];)を使用する必要がある場合、通常は構造体配列を使用します(インデックスアクセスの利点、キャッシュミスの可能性が低い)。はい、わかっています。そうですね、私自身、自分の実装が怖いです。しかし、私が目指すのはアルゴリズムであり、実装ではありません。土下座して組み立てる」(約1時間半)と言われるように、アルゴリズムの正しさと速さをチェックするためです。このスレッドでは、「ジャンク値の配列をフラッシュする最速の方法」について議論していることを思い出してください(引用)。 もっとも、私自身のアルゴリズムは普遍的とは言い難いので、不満も多いのですが。アルゴリズムを改善する方法はありますが、コードがかなり複雑になります。時間が残念です。 ZZY HashSet初聴、理論に強くないので。私は何も新しいものを発明していないし、すべて私より前に発明されていることをよく理解している。:))このアルゴリズムの利点は、削除するアイテムの配列が一様分布である場合に顕著である。分布が均一と大きく異なる場合、この実装はこのブランチに既に存在する他の実装と比較して、速度が劣る可能性があります。 Nikolai Semko 2018.11.19 23:52 #282 Taras Slobodyanik:金額の計算をCRC32に変更しました )ありがとうございます。もちろん、その方が正しいのですが。 しかし、私が理解する限り、CRC32に切り替えてもエラーは出ませんでした。:) Nikolai Semko 2018.11.20 00:48 #283 個人的には、最近のコンピュータの性能と、特にMQL5には感心しています。なにしろ、100万要素の配列から約1000種類の値を探し出し、それらを削除して(約10万セル)、きれいになった配列を再パッケージ化するのに、わずか1/40秒(!!)しかかからないのですから。 nicholish en 2018.11.20 03:12 #284 ファイル: ArrayDeleteValue21.mq5 40 kb Nikolai Semko 2018.11.20 04:27 #285 nicholi shen : すべて見事にシンプルです:))しかし、しかし、このアルゴリズムはメモリを無制限に消費します。そのため、例えば、以下のように置き換えるとarr[i]= rand ()% 10000 ; .... Value2[i]= rand ()% 10000 ;を使ってarr[i]= rand ()* rand (); .... Value2[i]= rand ()* rand ();とはいえ、状況はまったく異なる。2018.11 . 19 23 : 25 : 57.593 ArrayDeleteValue21 (NZDUSD,D1) вариант nicholi shen: Контрольная сумма = 3902843984.813025 ; элементов - 999983 ; время выполнения - 603551 микросекунд 2018.11 . 19 23 : 25 : 57.980 ArrayDeleteValue21 (NZDUSD,D1) вариант Nikitin : Контрольная сумма = 3902843984.813025 ; элементов - 999983 ; время выполнения - 383847 микросекунд 2018.11 . 19 23 : 25 : 58.043 ArrayDeleteValue21 (NZDUSD,D1) вариант fan9 : Контрольная сумма = 3902843984.813025 ; элементов - 999983 ; время выполнения - 61414 микросекунд 2018.11 . 19 23 : 25 : 58.074 ArrayDeleteValue21 (NZDUSD,D1) вариант Semko : Контрольная сумма = 3902843984.813025 ; элементов - 999983 ; время выполнения - 28430 микросекунд ファイル: ArrayDeleteValue21.mq5 40 kb Konstantin Nikitin 2018.11.20 07:51 #286 ArrayDeleteValueを プロジェクト 内の数人に追加し、編集権を付与。今まで見逃していた人。 Taras Slobodyanik 2018.11.20 08:57 #287 Nikolai Semko:ありがとうございます。確かにこれは正しい方法です。 しかし、私が理解する限り、CRC32に切り替えてもエラーは出ませんでした。:)しかし、たった1つのアルゴリズムの結果を自分の目で見た人は、他の人にも同じ結果が出るようにすることができるのです) Artyom Trishkin 2018.11.20 12:53 #288 をテーマに書いてください。バタバタしない、悪びれない。ありがとうございます。 Stanislav Dray 2018.11.20 21:40 #289 nicholi shen: 悪いアイデアではありませんが、配列やベクトルに負の値がある場合、array out of range エラーになります。また、フィルタリングフラグを含む配列のサイズは、2 147 483 647 に達する可能性があり、これは多すぎます。 もちろん、32個のBOOL変数の設定をこのようなビットマスクに置き換えることで、32倍のサイズにすることができます。 int array_filter(int &a[],const int &b[]) //nicholishen { int e=ArraySize(a); int c[]; int d =b[ArrayMaximum(b)]+1; ArrayResize(c, b[ArrayMaximum(b)]/32 + 1); ArrayInitialize(c, 0); int i=0; int ii=0; while(i<ArraySize(b)) { ii=b[i]/32; c[ii]|=(1<<(b[i]-(ii*32))); i++; } int g=0, h=0, f=0; for(g=0; g<e; g++){ f = a[g]; ii=f/32; if(f >= d || !(c[ii] & (1<<(f-(ii*32)))) ) { a[h]=f; h++; } } return ArrayResize(a, h); } が、それでも大きすぎて、スピードが半分くらいに落ちてしまいます。 Stanislav Dray 2018.11.20 22:11 #290 Nikolai Semko:すべて見事にシンプルです:))しかし、しかし、このアルゴリズムはメモリを無制限に消費します。そのため、例えば、以下のように置き換えるとを使ってしかし、状況はまったく異なります。あなたのバージョンも良いのですが、残念ながら弱点もあるのです。国内」条件下、すなわちサイズ〜100の小型アレイとサイズ〜5〜10の小型ベクターで このアルゴリズムは、ここで紹介したものよりも遅くなります。マイクロ秒の差は非常に小さいので、おそらく問題にはなりませんが、より大きなアレイでは、これがベストとなります。 P.S. 私は、この機能は普遍的なものであるべきで、入力データに応じてピックアップされたいくつかの異なるアルゴリズムを組み合わせる必要があると思います。 1...222324252627282930 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
基本的には、静的なHashSetデータ構造を使用して、衝突を解決するためのデータの初期配列があります。
ただ、実装は目を見張るものがありますね...。
100〜500個の不要なパラメータを持つ関数("FindValueInSortArray")を呼び出す代わりに、通常はクラスを使用し、これらのパラメータはクラスのフィールドとして機能します(コンパイラが暗黙のインライン化を推測しなかった場合、パラメータの受け渡しで 利益を得ます)。
同じサイズで同じ用途の配列の組(int p1[]; int p2[];)を使用する必要がある場合、通常は構造体配列を使用します(インデックスアクセスの利点、キャッシュミスの可能性が低い)。
はい、わかっています。そうですね、私自身、自分の実装が怖いです。しかし、私が目指すのはアルゴリズムであり、実装ではありません。土下座して組み立てる」(約1時間半)と言われるように、アルゴリズムの正しさと速さをチェックするためです。このスレッドでは、「ジャンク値の配列をフラッシュする最速の方法」について議論していることを思い出してください(引用)。
もっとも、私自身のアルゴリズムは普遍的とは言い難いので、不満も多いのですが。アルゴリズムを改善する方法はありますが、コードがかなり複雑になります。時間が残念です。
ZZY HashSet初聴、理論に強くないので。私は何も新しいものを発明していないし、すべて私より前に発明されていることをよく理解している。:))このアルゴリズムの利点は、削除するアイテムの配列が一様分布である場合に顕著である。分布が均一と大きく異なる場合、この実装はこのブランチに既に存在する他の実装と比較して、速度が劣る可能性があります。
金額の計算をCRC32に変更しました )
ありがとうございます。もちろん、その方が正しいのですが。
しかし、私が理解する限り、CRC32に切り替えてもエラーは出ませんでした。:)
個人的には、最近のコンピュータの性能と、特にMQL5には感心しています。
なにしろ、100万要素の配列から約1000種類の値を探し出し、それらを削除して(約10万セル)、きれいになった配列を再パッケージ化するのに、わずか1/40秒(!!)しかかからないのですから。
すべて見事にシンプルです:))
しかし、しかし、このアルゴリズムはメモリを無制限に消費します。
そのため、例えば、以下のように置き換えると
を使って
とはいえ、状況はまったく異なる。
ありがとうございます。確かにこれは正しい方法です。
しかし、私が理解する限り、CRC32に切り替えてもエラーは出ませんでした。:)
しかし、たった1つのアルゴリズムの結果を自分の目で見た人は、他の人にも同じ結果が出るようにすることができるのです)
悪いアイデアではありませんが、配列やベクトルに負の値がある場合、array out of range エラーになります。
また、フィルタリングフラグを含む配列のサイズは、2 147 483 647 に達する可能性があり、これは多すぎます。
もちろん、32個のBOOL変数の設定をこのようなビットマスクに置き換えることで、32倍のサイズにすることができます。
が、それでも大きすぎて、スピードが半分くらいに落ちてしまいます。
すべて見事にシンプルです:))
しかし、しかし、このアルゴリズムはメモリを無制限に消費します。
そのため、例えば、以下のように置き換えると
を使って
しかし、状況はまったく異なります。
あなたのバージョンも良いのですが、残念ながら弱点もあるのです。国内」条件下、すなわちサイズ〜100の小型アレイとサイズ〜5〜10の小型ベクターで
このアルゴリズムは、ここで紹介したものよりも遅くなります。マイクロ秒の差は非常に小さいので、おそらく問題にはなりませんが、より大きなアレイでは、これがベストとなります。
P.S. 私は、この機能は普遍的なものであるべきで、入力データに応じてピックアップされたいくつかの異なるアルゴリズムを組み合わせる必要があると思います。