4

NP 困難な問題を効率的に解決するためのツールを実装する必要があり、メモリ使用量の爆発 (場合によっては出力サイズが入力サイズに対して指数関数的) が避けられない可能性があり、実行時のこのツールのパフォーマンスが特に心配であるとします。時間。基礎となる理論が理解できたら、ソース コードも読みやすく理解しやすいものでなければなりません。この要件は、ツール自体の効率と同じくらい重要です。

個人的には、これらの 3 つの要件を満たすには、c++、scala、java の 3 つの言語が適していると考えています。それらはすべて、異なる構造を比較したり、同じアルゴリズム (これも重要です) を異なるデータ型に適用したりできるようにする、データ型の適切な抽象化を提供します。

C++ には、静的にコンパイルおよび最適化されるという利点があり、関数のインライン化 (データ構造とアルゴリズムが慎重に設計されている場合) およびその他の最適化手法を使用すると、かなり良好な可読性を維持しながら、純粋な C に近いパフォーマンスを実現できます。データ表現にも細心の注意を払うと、キャッシュ パフォーマンスを最適化できます。これにより、キャッシュ ミス率が低い場合に桁違いの速度が得られます。

Javaは代わりにJITコンパイルされているため、実行時に最適化を適用できます。このカテゴリのアルゴリズムでは、異なる実行間で異なる動作を持つ可能性があり、プラスになる可能性があります. 代わりに、そのようなアプローチがガベージコレクターに悩まされる可能性があることを恐れていますが、このアルゴリズムの場合、メモリを継続的に割り当てるのが一般的であり、Java ヒープのパフォーマンスは C/C++ よりも優れていることで有名です。言語内に独自のメモリマネージャーを実装すると、優れた効率を実現します。代わりに、このアプローチではメソッド呼び出しをインライン化することができず (パフォーマンスが大幅に低下します)、キャッシュ パフォーマンスを制御することもできません。長所の中には、C++ よりも優れた簡潔な構文があります。

scala に関する私の懸念は、多かれ少なかれ Java と同じであり、さらに、コンパイラーと標準ライブラリーに関する深い知識がなければ、言語がどのように最適化されるかを制御できないという事実です。しかしまあ、私は非常にきれいな構文を取得します:)

この件についてどう思いますか?あなたはすでにこれに対処しなければなりませんでしたか?これらの言語のいずれかで、そのようなプロパティと要件を持つアルゴリズムを実装しますか、それとも何か他のことを提案しますか? それらをどのように比較しますか?

4

4 に答える 4

2

Dは、より優れたC ++になろうとしていることを考えると、一見の価値があるかもしれません。

于 2011-04-11T17:28:31.987 に答える
1

アルゴリズムの作業を非常に簡単にする言語を使用します。正しいアルゴリズムを取得すると、間違ったアルゴリズムを微調整することによる利点を簡単に上回る可能性があります。通常は実行速度が遅いと考えられている言語で、アルゴリズムのアイデアを簡単に表現できるのであれば、怖がらずにその言語で遊んでみてください。通常、正しいアルゴリズムを別の言語に転記する方が、実行速度の最も速い言語で間違ったアルゴリズムから速度の最後のかすを探し出すよりもはるかに簡単です。

ですから、あなたが慣れ親しみ、表現力豊かな言語でそれを行ってください。生成されたものが十分に高速であることに驚くかもしれません。

于 2011-04-20T18:24:40.360 に答える
1

あなたが気づいた言語は、私の最初の推測でもありました。

言語ごとに、コンパイル、メモリ管理、ソース コードなどの特定の問題を処理する方法が異なりますが、理論的には、いずれも問題に適合するはずです。

どちらが最適かを判断することは不可能であり、それぞれの癖を回避するためにそれらすべてに十分に精通している場合、大きな違いはない可能性があります.

そして明らかに、実際に最適化の必要性を見つけた場合 (それが与えられているかどうかはわかりません)、それは各言語で可能です。低レベル言語は明らかにより多くのオプションを提供しますが、実際に改善するのは (はるかに) 複雑です。

C++ と Java についての注意点: これは本当に聖戦です。最近の開発を追ってきた人なら、おそらく自分の意見を持っているでしょう。私は、Java は通常、その欠点を補うのに十分な優れた側面を提供すると考えています。

そして、C++ と C に関する最後の注意: 私の知る限り、違いは通常、これを無視するのに十分に低いパーセンテージになります。ソース コードに違いがない場合は、C を使用しても問題ありません。C++ でソース コードが読みやすくなる場合は、C++ を使用してください。いずれにせよ、選択はごくわずかです。

最後に、数時間のプログラミング/最適化に費やされたお金は、見逃された小さな詳細を補うために、わずかに優れたハードウェアに費やされる可能性があることを覚えておいてください.

要約すると、適切に実行する限り、どのオプションでも問題ありません (ドメイン知識)。

于 2011-04-11T15:19:36.980 に答える