私は多くの問題を解決します。主にトップコーダーからです。私は多くの回答を得ますが、ほとんどの場合、非効率的な解決策になってしまいます。
実際の実装では、問題の解決策が効率的であることが本当に重要ですか?もしそうなら、どうすればそれを改善できますか?
私は多くの問題を解決します。主にトップコーダーからです。私は多くの回答を得ますが、ほとんどの場合、非効率的な解決策になってしまいます。
実際の実装では、問題の解決策が効率的であることが本当に重要ですか?もしそうなら、どうすればそれを改善できますか?
回答:
最良の解決策は、(重要性の高い順に)効率的で、保守可能で、実行済みの解決策です。
^^^これが、この回答から本当に必要な唯一のことです。^^^
効率は重要です。ハードウェアが豊富なため、以前よりも少し少ないかもしれませんが、パフォーマンスは機能です。コンテストでは、効率が明らかに重要です。効率的なコードの書き方を知っている必要があります。さらに重要なことは、アプリケーションの適時性や保守性を犠牲にすることなく、効率的で優れたパフォーマンスのコードを生成するためのベストプラクティスを知っておく必要があります。これは本当に、プラットフォームと言語の経験の深さが多くの成果をもたらすところです。
さらに重要なのは(95%の場合)、完成した保守可能なソリューションを用意することです。完成品がなければ、ソリューションの効率性や保守性は問題になりません。バグを追跡して修正したり、新しい機能を追加したりするのに非常に長い時間がかかる場合、ソリューションの効率は問題ではありません。しかし、誰が何を言っても、効率とパフォーマンスは間違いなく重要です。
私が追加したいのは、マイク・チェリーニに同意します。
「十分に効率的」なものはありますか?たとえば、ユーザーの観点から見ると、0.00001秒で完了する関数と0.1秒で完了する関数は、一方が他方よりもはるかに効率的であるにもかかわらず、それほど大きな違いはありません。10分で完了する機能は、(ユーザーにとって)12分で完了する機能とそれほど変わりません。どちらの場合も、ユーザーはコーヒーを飲むか、別のタスクを続行します。
効率は、効率的なアルゴリズムではなく「効率的なユーザー」であると考えてきました。
一般に、問題に対する最も重要な解決策は、実際に存在し、問題に対して存在するケースに有効なものになるでしょう。つまり、非効率的なコード、または高速化が必要な効率的なコードがあることが実際にわかるまでは、時期尚早の最適化を避けてください。
また、アプリケーションに最適なソリューションが一般的なケースのソリューションではない可能性があることも忘れないでください。事例とポイント、教授が2年前にクラスに問題を与え、特定の型の最初の10個の数値を出力することになりました(申し訳ありませんが、私の記憶は型に関して失敗しますが、それはより珍しい数の1つでした)クラス)、そしてその数が指定されたタイプであることを確認するためのテストが行われました。これが私たちに与えられた問題の程度であり、翌日が最も効率的なソリューションが全額を受け取ることになると言われました。次の講義では、教授が結果をまとめました。
最終的な解決策は教授によって最も効率的であると判断されました。問題は、実際に問題を完全に理解するための練習であり、単に出かけて最も効率的な解決策を見つけることではなかったことが判明しました。
上記のポイントは、問題の効率的な解決策を見つけることになると、時間をかけて問題を正確に理解してからコードを記述したり、コードを最適化したりすることをお勧めします。一連の参照値を定数配列に格納できる場合は、高度なアルゴリズムを記述しようとするよりも、パフォーマンスの観点から行う方が得策です。
同様に、ほとんどのアプリケーションでは、非効率的なコードを見る傾向があるのは(不必要に非効率的ではないのに!)、開発者自身だけであることを忘れないでください。必要なことだけを実行するクリーンなコードを作成する場合、プログラムを操作するとき、および言及する部分を最適化するだけの場合、ほとんどの場合、ユーザーはパフォーマンスの問題に気付かないでしょう。君は。
それはコンテストの構造に依存しますが、一般的にはそうです。彼らの 文書によると、ほとんどの場合、パフォーマンスは考慮事項です。時々、後のリンクのように、あなたは狩りをする必要がありますが、引用する必要があります:
クリーンで明確で効率的なコードを記述します。このためのレビュー項目は特にありませんが、レビュー担当者は読みやすく、理解しやすいコードに対してよりよく反応する可能性があります。効率的なコードを使用すると、ストレステストとベンチマークテストで潜在的なパフォーマンス上の利点が得られるだけでなく、レビュー担当者からの称賛(およびいくつかの追加ポイント)が得られます。
これを改善する最良の方法は、効率的なコードを書くことです。たとえ作業を完了したとしても、競争後であっても、その効率を改善することに時間を費やしてください。
おそらく、アルゴリズムに関する本など、特定の問題を解決するためのより効率的なツールと、解決しなければならない問題を特定するためのより効率的なメカニズムの2つを提供できる理論にも投資したいと考えています。
ソリューションがいかに効率的である必要があるかは、いくつかの要因に依存します。最大のことは、ユーザーが何を望んでいるかを知ることです。ここにいくつかの例があります。
コードをより効率的にする方法:
最適化の分野は丸ごとありますが、上記の2つのヒントは少なくとも始めに役立つはずです。
コンテストでは、審査員とは何か、審査員が何であるかを理解する必要があります。審査員が優れたコーダーだけを探している場合は、より効率的なコードに対する称賛を得ることができます。
原則として、現実の世界ではそれは問題ではありません。ソフトウェア開発の重要なアイデアの1つは、「知らないものは最適化しないでください。最適化が必要です」、「必要であることが証明された場合にのみ最適化する」です。
多くの実務家は、これが簡単に修正できない肥大した非効率的なコードにつながり、一部のエッジケース(ほとんどのプログラマーが毎日毎日そうしているように混雑する)で正しいと主張します。しかし、多くのソフトウェア開発プロジェクトは、測定された結果を持っているわけではありません。それが機能する」。