[アーカイブ!】純粋数学、物理学、化学など:トレードとは一切関係ない脳トレ問題集 - ページ 510 1...503504505506507508509510511512513514515516517...628 新しいコメント Maxim Zaguzov 2011.08.21 21:08 #5091 IgorM: 私はcontinueとbreakの演算子を使うのが好きではありませんが、もしかしたらあなたの助けになるかもしれません。 うまくいかなかったら、continueを使おうかな...。でも、わざわざやる必要はまったくない。むしろ、違うアルゴリズムを作ったほうが、少なくとも面白いでしょう。 Vladimir Gomonov 2011.08.21 21:21 #5092 MaxZ: そして加速する 私のコードは、複雑な36項目のチェック条件からなるifを、単純な条件の36個のifに分解することができるのです!:))) コンパイルの結果であるマシン命令を理解する必要がありますが、コードは顕著にスピードアップすると思います。 MT5であなたのコードを実行しました。 すでに論理演算子の短時間での評価が実装(ビルトイン)されているので、コードをたくさんのifに分割する必要はないのです。 MT4では違うので、この最適化はそちらで意味があります。しかし、私はMT5で、短いスキームで時間評価をしてみました。 Vladimir Gomonov 2011.08.21 21:47 #5093 4倍に加速した。 Validate()を書き直した。 今はこんな感じです。 bool Validate(int X) { int XX=0; int A[]; IntToArray(X,A); for(int i=5;i>-1;i--) { XX|=int(1<<A[i]); } if(XX==0x7E) {return true;} return false; } void IntToArray(int X, int &A[]) { ArrayResize(A,6); for(int i=0;i<6;i++) { A[i]=X%10; X/=10; } } ワークタイム == 200 ms Maxim Zaguzov 2011.08.21 21:53 #5094 恐ろしいことに、次のようにコードを最適化することに意味があるのです。何倍も速い!そして、ここではMT5はもう役に立ちません。 もちろん、アイデアではありません。でも、どれくらいのスピードで動くんだろう!:)) また、コードでは、除数値の範囲を 狭めました。654321/2 = 327160,5... for (int A6 = 1; A6 <= 6; A6++) for (int A5 = 1; A5 <= 6; A5++) { if (A5 == A6) continue; for (int A4 = 1; A4 <= 6; A4++) { if (A4 == A5 || A4 == A6) continue; for (int A3 = 1; A3 <= 6; A3++) { if (A3 == A4 || A3 == A5 || A3 == A6) continue; for (int A2 = 1; A2 <= 6; A2++) { if (A2 == A3 || A2 == A4 || A2 == A5 || A2 == A6) continue; for (int A1 = 1; A1 <= 6; A1++) { if (A1 == A2 || A1 == A3 || A1 == A4 || A1 == A5 || A1 == A6) continue; for (int B6 = 1; B6 <= 3; B6++) { if (B6 == A6) continue; for (int B5 = 1; B5 <= 6; B5++) { if (B6 == 3 && B5 > 2) continue; if (B5 == A5) continue; if (B5 == B6) continue; for (int B4 = 1; B4 <= 6; B4++) { if (B4 == A4) continue; if (B4 == B5 || B4 == B6) continue; for (int B3 = 1; B3 <= 6; B3++) { if (B3 == A3) continue; if (B3 == B4 || B3 == B5 || B3 == B6) continue; for (int B2 = 1; B2 <= 6; B2++) { if (B2 == A2) continue; if (B2 == B3 || B2 == B4 || B2 == B5 || B2 == B6) continue; for (int B1 = 1; B1 <= 6; B1++) { if (B1 == A1) continue; if (B1 == B2 || B1 == B3 || B1 == B4 || B1 == B5 || B1 == B6) continue; int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1; int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1; if (MathMod(A, B) == 0) Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B); } } } } } } } } } } } Maxim Zaguzov 2011.08.21 21:58 #5095 MetaDriver: 4倍に加速した。 Validate()を書き直した。 今はこんな感じです。 ワークタイム == 200 ms きれいですねー。私のとは違う。 列分割のアルゴリズムを書くアイデアがあります。桁で割り、割り算の余りを書き、結果が6より大きいとき、continue操作を行う。それこそ、今日の午後、5を調べているときに、全部をコラムで分けたんです。でも、久々の登場です!:)) 16進数表現でこそ、あなたのような最適化が必要なのです。 Vladimir Gomonov 2011.08.21 22:20 #5096 MaxZ: 列分割のアルゴリズムを書くアイデアがあります。桁で割って、割り算の余りを書き、一致するか結果が6より大きければ、コンティニュー操作を行う。そ れこそ、今日の午後、5を調べているときに、全部をコラムで分けたんです。でも、久々の登場です!:)) 6桁の数字の表現にこそ、あなたのような最適化が必要なのです。 О!それは悪いことではありません。もう一度書き直す。 WorkTime=125ms。 bool Validate(int X) { int XX=0; int A[]; if(!IntToArray(X,A)) return false; // изменено здесь тоже, но основное ниже for(int i=5;i>-1;i--) { XX|=int(1<<A[i]); } if(XX==0x7E) {return true;} return false; } bool IntToArray(int X,int &A[]) { ArrayResize(A,6); int x=X%10; if(x==0 || x>6) return false; // главное изменение else A[0]=x; for(int i=1;i<6;i++) { X/=10; x=X%10; if(x==0 || x>6) return false; // главное изменение else A[i]=x; } return true; } Maxim Zaguzov 2011.08.21 22:23 #5097 MetaDriver: О!それは悪いことではありません。もう一度書き直します。 WorkTime=125ms これでホッケー選手もハッピーでいられること間違いなしです:))))でも、そういう意味じゃないんですよー。;D Myコードによるタイムカウンターはどのくらい表示されるのですか? 変更点は理解している。ただ、まだ使いこなせていないだけなんです。 for(int i=5;i>-1;i--) { XX|=int(1<<A[i]); } if(XX==0x7E) {return true;} "|="は論理和なのか?あとは行き止まり...。 Vladimir Gomonov 2011.08.21 22:29 #5098 MaxZ: これで、ホッケー選手も喜ぶこと間違いなし!:)))) そうですね。 新しいコードはさらに高速化されましたが、そこにはいくつかのバグがあります。 for (int A6 = 1; A6 <= 6; A6++) for (int A5 = 1; A5 <= 6; A5++) { if (A5 == A6) continue; for (int A4 = 1; A4 <= 6; A4++) { if (A4 == A5 || A4 == A6) continue; for (int A3 = 1; A3 <= 6; A3++) { if (A3 == A4 || A3 == A5 || A3 == A6) continue; for (int A2 = 1; A2 <= 6; A2++) { if (A2 == A3 || A2 == A4 || A2 == A5 || A2 == A6) continue; for (int A1 = 1; A1 <= 6; A1++) { if (A1 == A2 || A1 == A3 || A1 == A4 || A1 == A5 || A1 == A6) continue; for (int B6 = 1; B6 <= 3; B6++) { if (B6 == A6) continue; for (int B5 = 1; B5 <= 6; B5++) { if (B6 == 3 && B5 > 2) continue; if (B5 == A5) continue; if (B5 == B6) continue; for (int B4 = 1; B4 <= 6; B4++) { if (B4 == A4) continue; if (B4 == B5 || B4 == B6) continue; for (int B3 = 1; B3 <= 6; B3++) { if (B3 == A3) continue; if (B3 == B4 || B3 == B5 || B3 == B6) continue; for (int B2 = 1; B2 <= 6; B2++) { if (B2 == A2) continue; if (B2 == B3 || B2 == B4 || B2 == B5 || B2 == B6) continue; for (int B1 = 1; B1 <= 6; B1++) { if (B1 == A1) continue; if (B1 == B2 || B1 == B3 || B1 == B4 || B1 == B5 || B1 == B6) continue; int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1; int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1; if (MathMod(A, B) == 0) Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B); } } } } } } } } } } } 中括弧の数が合わなかった。でも、何のことはない、最後の一枚を削除すれば直るのだと思います。 ハイライトされた行の意味を説明してください。理解できない。 Maxim Zaguzov 2011.08.21 22:35 #5099 MetaDriver: そうですね。 新しいコードはさらに高速化されましたが、そこにはいくつかのバグがあります。 中括弧の数が合わなかった。でも、なんでもない、最後の一枚を削除すれば直ると思います。 分離線の意味を説明する。理解できない。 その通り...嘘つけ!:)))ブラケットもOKのようです、既成のコードからコピーしました。 こうあるべきなのです。 for (int A6 = 1; A6 <= 6; A6++) for (int A5 = 1; A5 <= 6; A5++) { if (A5 == A6) continue; for (int A4 = 1; A4 <= 6; A4++) { if (A4 == A5 || A4 == A6) continue; for (int A3 = 1; A3 <= 6; A3++) { if (A3 == A4 || A3 == A5 || A3 == A6) continue; for (int A2 = 1; A2 <= 6; A2++) { if (A2 == A3 || A2 == A4 || A2 == A5 || A2 == A6) continue; for (int A1 = 1; A1 <= 6; A1++) { if (A1 == A2 || A1 == A3 || A1 == A4 || A1 == A5 || A1 == A6) continue; for (int B6 = 1; B6 <= 3; B6++) for (int B5 = 1; B5 <= 6; B5++) { if (B6 == 3 && B5 > 2) continue; if (B5 == B6) continue; for (int B4 = 1; B4 <= 6; B4++) { if (B4 == B5 || B4 == B6) continue; for (int B3 = 1; B3 <= 6; B3++) { if (B3 == B4 || B3 == B5 || B3 == B6) continue; for (int B2 = 1; B2 <= 6; B2++) { if (B2 == B3 || B2 == B4 || B2 == B5 || B2 == B6) continue; for (int B1 = 1; B1 <= 6; B1++) { if (B1 == B2 || B1 == B3 || B1 == B4 || B1 == B5 || B1 == B6) continue; if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1) { int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1; int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1; if (MathMod(A, B) == 0) Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B); } } } } } } } } } } } また、MQL5では、比較のスピードが少し速くなります。 if (A > B && MathMod(A, B) == 0) しかし、125msは明らかに追いついていない。 Андрей 2011.08.21 22:35 #5100 それとも、全部C++なのかな? . Validate- 1 パラメータ機能。 昔ながらの方法はどうだろう...。メモリを確保し、boolをキャッシュする は、引数のすべての有効な値に対して? 1...503504505506507508509510511512513514515516517...628 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私はcontinueとbreakの演算子を使うのが好きではありませんが、もしかしたらあなたの助けになるかもしれません。
そして加速する 私のコードは、複雑な36項目のチェック条件からなるifを、単純な条件の36個のifに分解することができるのです!:)))
コンパイルの結果であるマシン命令を理解する必要がありますが、コードは顕著にスピードアップすると思います。
MT5であなたのコードを実行しました。 すでに論理演算子の短時間での評価が実装(ビルトイン)されているので、コードをたくさんのifに分割する必要はないのです。
MT4では違うので、この最適化はそちらで意味があります。しかし、私はMT5で、短いスキームで時間評価をしてみました。
4倍に加速した。 Validate()を書き直した。
今はこんな感じです。
ワークタイム == 200 ms恐ろしいことに、次のようにコードを最適化することに意味があるのです。何倍も速い!そして、ここではMT5はもう役に立ちません。
もちろん、アイデアではありません。でも、どれくらいのスピードで動くんだろう!:))
また、コードでは、除数値の範囲を 狭めました。654321/2 = 327160,5...
4倍に加速した。 Validate()を書き直した。
今はこんな感じです。
ワークタイム == 200 msきれいですねー。私のとは違う。
列分割のアルゴリズムを書くアイデアがあります。桁で割り、割り算の余りを書き、結果が6より大きいとき、continue操作を行う。それこそ、今日の午後、5を調べているときに、全部をコラムで分けたんです。でも、久々の登場です!:))
16進数表現でこそ、あなたのような最適化が必要なのです。
列分割のアルゴリズムを書くアイデアがあります。桁で割って、割り算の余りを書き、一致するか結果が6より大きければ、コンティニュー操作を行う。そ れこそ、今日の午後、5を調べているときに、全部をコラムで分けたんです。でも、久々の登場です!:))
6桁の数字の表現にこそ、あなたのような最適化が必要なのです。
О!それは悪いことではありません。もう一度書き直す。 WorkTime=125ms。
О!それは悪いことではありません。もう一度書き直します。 WorkTime=125ms
これでホッケー選手もハッピーでいられること間違いなしです:))))でも、そういう意味じゃないんですよー。;D
Myコードによるタイムカウンターはどのくらい表示されるのですか?
変更点は理解している。ただ、まだ使いこなせていないだけなんです。
"|="は論理和なのか?あとは行き止まり...。
これで、ホッケー選手も喜ぶこと間違いなし!:))))
そうですね。
新しいコードはさらに高速化されましたが、そこにはいくつかのバグがあります。
中括弧の数が合わなかった。でも、何のことはない、最後の一枚を削除すれば直るのだと思います。
ハイライトされた行の意味を説明してください。理解できない。
そうですね。
新しいコードはさらに高速化されましたが、そこにはいくつかのバグがあります。
中括弧の数が合わなかった。でも、なんでもない、最後の一枚を削除すれば直ると思います。
分離線の意味を説明する。理解できない。
その通り...嘘つけ!:)))ブラケットもOKのようです、既成のコードからコピーしました。
こうあるべきなのです。
また、MQL5では、比較のスピードが少し速くなります。
しかし、125msは明らかに追いついていない。
それとも、全部C++なのかな?
.
Validate- 1 パラメータ機能。
昔ながらの方法はどうだろう...。メモリを確保し、boolをキャッシュする
は、引数のすべての有効な値に対して?