ブルートフォースソリューションの選択は悪い兆候ですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/418465

  •  03-07-2019
  •  | 
  •  

質問

私は初心者のC ++プログラマであり、心を引き伸ばすために、 projecteuler.netでいくつかの問題を試しています。 。学校で数学に興味がありましたが、合理化されたエレガントなものを探すのではなく、自動的に問題のブルートフォースソリューションを求めています。

これは悪い考え方のように聞こえますか?私はこのようにしてやるのは少し罪悪感を覚えますが、たぶん手っ取り早く汚れても大丈夫です...

役に立ちましたか?

解決

最終目標が何であり、制約が何であるかを検討する必要があると思います。

ブルートフォース法は、ソリューションと「賢い」組み合わせのすべての組み合わせを試して50ミリ秒で問題を解決できる場合があります。ソリューションは10msで解決できます。その時点で、あまり賢くないが理解しやすいソリューションが賢いソリューションに勝ります。

ただし、ブルートフォーシングが洗練されていないだけでなく、機能しないという問題がいくつかあります。それらを単純にブルートフォースしようとすると、それらを解決するのにかなりの時間がかかるという多くの問題があります。したがって、明らかに、これらのタイプの問題には、より洗練されたアプローチが必要です。

では、なぜこれらのProject Eulerの問題を試みているのか、考えてみてください。学ぶためにやっていますか?その後、賢明な解決策を試すことはあなたの最大の関心事かもしれませんが、問題を把握するためにブルートフォースの解決策を最初に試した後にのみです。

Python Challengeの問題を実行するときは、できる限り簡潔にできるようにして、能力の限界を押し広げます。私はそれを解決した後、他の人々の答えを確認し、自分より賢い人々と彼らがしたことの精神的なメモを取る。一部の人々は、私が考えていなかったデータ構造を特別に利用し、それがタスクにより適しているか、アルゴリズムをより効率的にするための数学的なトリックはほとんどありません。結局、私はできる限り彼らの賢さを吸収し、次に似たような性質の問題が提示されたときにそれを見せるようにします。

他のヒント

いいえ、これは悪いことではありません。エレガントで間違ったソリューションがありました。

初心者プログラマーとして、各問題の賢明な解決策を見つけることにエネルギーを費やすのではなく、C ++で実際に物事を実装する方法を見つけ出すために、より多くの精神エネルギーを費やすことになります。さまざまな種類の問題に取り組みながら、C ++のさまざまな領域を探索する機会が得られるため、これは問題ありません。

C ++に習熟し、あらゆる小さなことを行う方法を考える必要がなくなると、 then 強引ではないソリューションの開発により多くの時間を費やすことができるようになります。

エレガントなソリューションは自発的に作成されたものではありません。現在のソリューションでより高速またはより少ないメモリ消費が必要な場合、ブルートフォースソリューションから派生しました。

いいえ、そうではありません。エレガントなソリューションが生まれた方法です。

この進化を経験しました:

  1. コンパイルして取得
  2. 期待どおりに動作させる
  3. 動作する1つのソリューションを見つける
  4. 1つの優れたソリューションを見つけ出す
  5. 複数のソリューションを見つけ出し、最適なソリューションを見つけます
  6. 複数のソリューションを見つけ出し、この状況に最適なソリューションを見つけます
  7. ??まだそこに行っていない

いいえ、それは悪い兆候ではありません。実際、時期尚早の最適化から遠ざかることで自分自身を支持しているので、これは間違いなく良いことです。

ケントンプソン:"疑わしいときは、ブルートフォースを使用する"

学習は総当たり的なプロセスです。私はその悪いとは言いません。そのようにして何かをしようとすると、パターンに気付くことがあります。あなたが何かについて考え、あなたが学ぶ解決策を見つけようとしている限り、私は思う。最もエレガントで効率的なソリューションにジャンプする人はほとんどいません。

学ぶことを試みている人々が悪いと呼ばれることを私に確信させることは難しいでしょう。恐らく邪悪な科学者を除いて:P

幸運。

問題の1分間の実行時ルールに適合していますか?はいの場合、「ブルートフォース」ソリューションはすべての要件を満たしますが、実際にはすぐに機能するものを思い付くことができるという非常に良い兆候です!

これらの種類の問題は、マイクロ最適化と非常に巧妙なアルゴリズムを奨励しますが、一般に、非常に読みやすい単純な実装は保守がはるかに容易であり、ビジネスの世界で好まれます。

「ブルートフォース」という状況が発生した場合=> " simple"および「エレガント」 => " complex&quot ;;その後、ブルートフォースが勝ちます。そして、これは非常にしばしば真実です。

まったくありません。問題を正しく完全に解決してから、必要に応じてパフォーマンスまたはエレガントさを高めます。

それは明らかなパフォーマンスの改善を無視すべきだと言うことではありません...問題をよりよく理解するまでそれらに集中しないでください。

これを別のコンテキストに配置するには:

あまり知られていないライブラリを使用すると(たとえば、UIを作成するために)、「正しい方法」があることはわかっていますが、簡単な問題を完全にパフォーマンスの高い方法で解決できます。それを行うには。好奇心が強く、ブルートフォースコードがバカのように見えることを心配している場合は、すぐに「正しい方法」が見つかります。それを行うために(例:週末、または睡眠中)。 それまでの間、ブルートフォースにより、機能するものが手に入ります。

私は実際に時々ブルートフォースを使用することを忘れ、「正しい」ためにAPIのスキャンを開始します。溶液。これは多くの場合間違いなく間違いです。 ブルートフォースソリューションの実装が簡単な場合、必要に応じてスケーリングし(実際に機能する場合)、正しいソリューションを忘れてください。すぐに見つかります(そして、何度も既にそれを知っていました!)、しかしその間に、あなたは問題を解決し、次の問題に進むことができました。

コーディングの際のロードブロッキングはひどいため、ブルートフォースソリューションよりも確実に回避する必要があります。

ブルートフォースへの傾向は、特に初心者としては間違いなく悪い兆候ではありません。特にProject Eulerでは、ブルートフォースメソッドを実装し、コメントを確認してより効率的なメソッドを学習しないのは悪い兆候です。

私はしばしばあなたがいるのと同じ船に行き着きます。それが実際に私がP.Eを始めた理由です。問題-私は多くのブルートフォースアプローチを実装しており、よりエレガントなソリューションに自分をさらけ出したかったのです...

オプションを検討しました。ブルートフォースソリューションが仕事を完了し、正常に実行する場合、それは良いソリューションです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top