定義された要素の配列をクリアする。 - ページ 21 1...141516171819202122232425262728...30 新しいコメント Konstantin Nikitin 2018.11.16 14:19 #201 でどのような挙動になるかはわかりません。 ArraySetAsSeries(array,true); 前回のバリアントでは、それにもチェックを入れました。必要な人が使えばいいんです。 ファイル: ArrayDeleteValue.mq5 25 kb Konstantin Nikitin 2018.11.16 14:42 #202 Реter Konow:そうですね。しかし、提供されたアルゴリズムが空白を残さないことをどうやって確認するのでしょうか?チェックサムでは証明できない。要素数も関係ない。結局のところ,この関数は配列のサイズが変更される前に存在していた要素を数えます.ほとんどの場合、NULLでクエリを送信することで問題なく実装されています。タグのコノウ。アルゴリズムにはもう一つ要件がある。不要な項目を削除した後、配列内の項目を正しく配置することである。このチェックが先に行われている必要があります。そして、スピードのチェックがあります。コードでは、どれが何を返すかを説明しています。シャッフルアレイがある。別の配列にあります。 追伸:念のため。私の機能では、いくつかのチェックがありますが、使用されていません。しかし、すでにこれだけでなく、それ以上のものを備えているのです。 Реter Konow 2018.11.16 14:56 #203 参加者やその場のプロ意識を疑っているわけではありません。私は、チェックサムチェックの欠陥と、新しい配列の要素の配置が正しいかどうかの追加検証の必要性を指摘したに過ぎません。 もしこれがすべて正しいのであれば、私は当然のように第2位を獲得したことになる。私の実務では、具体的な操作の速さを考えることはほとんどありません。それよりも、解答の簡潔さ、わかりやすさを重視しています。このエントリーには、驚きました。 if(Arr[q]==val){deleted++; q--;} が遅くなる可能性があります。 でも、アルゴリズムの評価基準にもう一つ、ソリューションのコンパクトさを加えたら、たぶん1位だと思います。 SpeedとCompressionの2つの基準を組み合わせて、アルゴリズムの平均スコアを計算すると、私は上位に位置することになります。 しかし、フェドセーエフのバージョンは、私のものよりさらに凝縮されている。 Nikolai Semko 2018.11.16 15:14 #204 Реter Konow:しかし、アルゴリズムの評価基準としてもう一つ、Solution Compressionを加えると、おそらく私は1位でしょう。あなたのバージョンのメインループ。 for(int a1=0; a1<ArraySize(Arr); a1++) { if(deleted)Arr[q]=Arr[q+deleted]; if(Arr[q]==val) { deleted++; q--; } q++; }と、これはフェドセーエフのもの。 for(;i<sz;i++) { if(a[i]!=v) { a[j]=a[i]; j++; } }どちらのバリエーションも同じことをします。最も簡潔なのは誰ですか? Реter Konow 2018.11.16 15:20 #205 Nikolai Semko:メインサイクルのあなたのバージョン。 と、これはフェドセーエフのもの。 どちらも同じことをするのです。最も簡潔なのは誰?彼です。代わりに持っているのは... for(int a1=0; a1<ArraySize(Arr); a1++) for(;i<sz;i++)より簡潔である) Nikolai Semko 2018.11.16 15:27 #206 Реter Konow:彼は持っています。代わりに持っているのは... こちらの方が簡潔でいいですね))それは、コンパイラも同じです。 単に無駄なものが多いから皆より動作が遅いだけでしょ(トピックから最初の選択肢は考えていない)。 Fedoseyevのコードでは、1回の ループパスでチェック、代入、インクリメントを1 回ずつ行って います(ループ構成のためチェックとインクリメントはカウントしていません)。 これに対して、チェックが2つ 、2変数の和が1つ、インクリメントが3 つ、代入が1 つありますね。 Aleksey Lebedev 2018.11.16 16:07 #207 for(int a1=0; a1<ArraySize(Arr); a1++) コンパイラが最適化してくれないと、ArraySizeが 繰り返し実行されてしまいます。 Nikolai Semko 2018.11.16 16:13 #208 Aleksey Lebedev: コンパイラが最適化してくれないと、ArraySizeが繰り返し実行されてしまいます。はい、コンパイラは、ループ内で配列のサイズが 変化しない場合、独立してこの関数を1つの値に置き換えて、この関数を1回だけ計算することをチェックしているようです。 何はともあれ、こうすれば。 const int size=ArraySize(Arr); for(int a1=0; a1<size; a1++) の場合、関数の実行時間は変わりません。 だから、よりコンパクトにするために、Peterがやったのと同じように書くのが理にかなっているんだ :) でも、個人的には目にもしみるので、賛成です。毎回関数が呼び出される感じです。 Aleksey Lebedev 2018.11.16 16:57 #209 Nikolai Semko:でも、そうですね、個人的には私も切れます。毎回関数が呼び出される感じです。imhoは、コンパイラに選択肢を与えない方が良いと思います)質問させてください。if(count>6) {ArrayCopy 科学的な直感によるものか、それとも正当な理由があるのか?) Nikolai Semko 2018.11.16 16:59 #210 Aleksey Lebedev:コンパイラに選択肢を与えない方が良い)質問させてください。if(count>6) { ArrayCopy 6つ以上 - 科学的直感で得られる値、その根拠は?)はい、まさにその通りです。科学的直感のメソッド。私の観測では5から8まであります。この数値を毎回オートチューニングすることで、この作業を自動化することができます。結局のところ、この数字はプロセッサーやシステムによって異なる可能性があるのです。 例えば、CCanvas クラスの ArrayCopy と ArrayFill をすべてこの原理で変更すると、canvas の速度が大幅に向上します。 1...141516171819202122232425262728...30 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
前回のバリアントでは、それにもチェックを入れました。必要な人が使えばいいんです。
そうですね。しかし、提供されたアルゴリズムが空白を残さないことをどうやって確認するのでしょうか?チェックサムでは証明できない。要素数も関係ない。結局のところ,この関数は配列のサイズが変更される前に存在していた要素を数えます.
ほとんどの場合、NULLでクエリを送信することで問題なく実装されています。
アルゴリズムにはもう一つ要件がある。不要な項目を削除した後、配列内の項目を正しく配置することである。このチェックが先に行われている必要があります。そして、スピードのチェックがあります。
コードでは、どれが何を返すかを説明しています。シャッフルアレイがある。別の配列にあります。
追伸:念のため。私の機能では、いくつかのチェックがありますが、使用されていません。しかし、すでにこれだけでなく、それ以上のものを備えているのです。
参加者やその場のプロ意識を疑っているわけではありません。私は、チェックサムチェックの欠陥と、新しい配列の要素の配置が正しいかどうかの追加検証の必要性を指摘したに過ぎません。
もしこれがすべて正しいのであれば、私は当然のように第2位を獲得したことになる。
私の実務では、具体的な操作の速さを考えることはほとんどありません。それよりも、解答の簡潔さ、わかりやすさを重視しています。このエントリーには、驚きました。
if(Arr[q]==val){deleted++; q--;}
が遅くなる可能性があります。
でも、アルゴリズムの評価基準にもう一つ、ソリューションのコンパクトさを加えたら、たぶん1位だと思います。
SpeedとCompressionの2つの基準を組み合わせて、アルゴリズムの平均スコアを計算すると、私は上位に位置することになります。
しかし、フェドセーエフのバージョンは、私のものよりさらに凝縮されている。しかし、アルゴリズムの評価基準としてもう一つ、Solution Compressionを加えると、おそらく私は1位でしょう。
あなたのバージョンのメインループ。
と、これはフェドセーエフのもの。
どちらのバリエーションも同じことをします。最も簡潔なのは誰ですか?
メインサイクルのあなたのバージョン。
と、これはフェドセーエフのもの。
どちらも同じことをするのです。最も簡潔なのは誰?
彼です。代わりに持っているのは...
for(;i<sz;i++)
より簡潔である)
彼は持っています。代わりに持っているのは...
こちらの方が簡潔でいいですね))
それは、コンパイラも同じです。
単に無駄なものが多いから皆より動作が遅いだけでしょ(トピックから最初の選択肢は考えていない)。
Fedoseyevのコードでは、1回の ループパスでチェック、代入、インクリメントを1 回ずつ行って います(ループ構成のためチェックとインクリメントはカウントしていません)。
これに対して、チェックが2つ 、2変数の和が1つ、インクリメントが3 つ、代入が1 つありますね。
コンパイラが最適化してくれないと、ArraySizeが 繰り返し実行されてしまいます。
コンパイラが最適化してくれないと、ArraySizeが繰り返し実行されてしまいます。
はい、コンパイラは、ループ内で配列のサイズが 変化しない場合、独立してこの関数を1つの値に置き換えて、この関数を1回だけ計算することをチェックしているようです。
何はともあれ、こうすれば。
の場合、関数の実行時間は変わりません。
だから、よりコンパクトにするために、Peterがやったのと同じように書くのが理にかなっているんだ :)
でも、個人的には目にもしみるので、賛成です。毎回関数が呼び出される感じです。
でも、そうですね、個人的には私も切れます。毎回関数が呼び出される感じです。
imhoは、コンパイラに選択肢を与えない方が良いと思います)
質問させてください。
if(count>6) {ArrayCopy
科学的な直感によるものか、それとも正当な理由があるのか?)コンパイラに選択肢を与えない方が良い)
質問させてください。
if(count>6) { ArrayCopy
6つ以上 - 科学的直感で得られる値、その根拠は?)はい、まさにその通りです。科学的直感のメソッド。私の観測では5から8まであります。この数値を毎回オートチューニングすることで、この作業を自動化することができます。結局のところ、この数字はプロセッサーやシステムによって異なる可能性があるのです。
例えば、CCanvas クラスの ArrayCopy と ArrayFill をすべてこの原理で変更すると、canvas の速度が大幅に向上します。