タグ付けされた質問 「optimization」

最適化とは、方法または設計を改善することです。プログラミングでは、最適化は通常、アルゴリズムの速度を上げるか、必要なリソースを減らすという形を取ります。最適化のもう1つの意味は、機械学習で使用される数値最適化アルゴリズムです。

9
SQL:レコードが存在するかどうかを適切にチェックする方法
SQLチューニング関連のドキュメントを読んでいると、次のことがわかりました。 SELECT COUNT(*) : 行数をカウントします。 多くの場合、レコードの存在を確認するために不適切に使用されます。 あるSELECT COUNT(*)本当に悪いですか? レコードの存在を確認する適切な方法は何ですか?

25
次の2の累乗に切り上げ
次の2のべき乗の数を返す関数を書きたいのですが。たとえば、入力が789の場合、出力は1024になるはずです。ループを使用せずにビット演算子を使用するだけでこれを実現する方法はありますか?

10
if ... else ifステートメントを確率で順序付けするとどのような影響がありますか?
具体的には、一連のif... else ifステートメントがあり、各ステートメントがに評価される相対確率をあらかじめ何らかの方法で知っtrueている場合、それらを確率の順に並べ替えると、実行時間にどのくらいの差が生じますか?たとえば、私はこれを好むべきですか: if (highly_likely) //do something else if (somewhat_likely) //do something else if (unlikely) //do something これに?: if (unlikely) //do something else if (somewhat_likely) //do something else if (highly_likely) //do something ソートされたバージョンの方が速いことは明らかですが、読みやすさや副作用の存在のために、それらを最適でない順序で並べることができます。また、実際にコードを実行するまで、CPUが分岐予測をどの程度うまく処理できるかを判断することも困難です。 それで、これを実験している間に、特定のケースについて自分の質問に答えることになりましたが、他の意見/洞察も聞きたいです。 重要:この質問はif、プログラムの動作に他の影響を与えることなく、ステートメントを任意に並べ替えることができることを前提としています。私の回答では、3つの条件テストは相互に排他的であり、副作用はありません。確かに、望ましい動作を実現するためにステートメントを特定の順序で評価する必要がある場合、効率性の問題は疑わしいものです。

3
GHCが確実に実行すると期待できる最適化は何ですか?
GHCには実行可能な多くの最適化がありますが、それらすべてがどのようなものであるか、またそれらがどの程度の確率で実行される可能性があるのか​​、またどのような状況で実行されるのかはわかりません。 私の質問は次のとおりです。毎回、どのような変換が適用されると期待できますか、またはほぼ同じでしょうか。頻繁に実行(評価)されるコードを見て、最初の考えが「うーん、多分それを最適化する必要がある」である場合、2番目の考えは「それについてさえ考えないでください」 GHCはこれを得た」? 私は「Stream Fusion:From Lists to Streams to Nothing at All」というペーパーを読んでいて、彼らがリスト処理を別の形式に書き換えて、GHCの通常の最適化が単純なループに確実に最適化する手法は私にとっては斬新でした。自分のプログラムがそのような最適化の対象となる時期を知るにはどうすればよいですか? GHCマニュアルにはいくつかの情報がありますが、それは質問への回答の一部に過ぎません。 編集:私は賞金を始めています。私が欲しいのは、ラムダ/レット/ケースフローティング、タイプ/コンストラクタ/関数の引数の特殊化、厳密性分析とボックス化解除、ワーカー/ラッパー、および私が省略した他の重要なGHCのすべてのような下位レベルの変換のリストです、および入力コードと出力コードの説明と例、および理想的には、全体の効果がその部分の合計よりも多い状況の図。そして、理想的には、変換が行われない場合のいくつかの言及起こります。私はすべての変換について斬新な長さの説明を期待していません。全体像がわかる限り、2、3の文とインラインの1行のコード例(または20ページの科学論文でない場合はリンク)で十分です。それの終わりまでに明らかに。コードを見て、コンパイルしてタイトなループになるか、そうでないのか、それを作成するために何を変更する必要があるのか​​を推測できるようにしたいと思います。(ここでは、ストリームフュージョンなどの大きな最適化フレームワークにはあまり興味がありません(それについての論文を読んだだけですが、これらのフレームワークを作成する人々が持っている種類の知識に関心があります)。

14
MYSQL ORとINのパフォーマンス
以下の性能に違いはないかと思います SELECT ... FROM ... WHERE someFIELD IN(1,2,3,4) SELECT ... FROM ... WHERE someFIELD between 0 AND 5 SELECT ... FROM ... WHERE someFIELD = 1 OR someFIELD = 2 OR someFIELD = 3 ... またはMySQLはコンパイラがコードを最適化するのと同じ方法でSQLを最適化しますか? 編集:コメントに記載されている理由により、ANDをからに変更しましたOR

1
なぜ早期復帰が他よりも遅いのですか?
これは、私が数日前に答えたフォローアップの質問です。編集:その質問のOPは、私が彼に投稿したコードを使用して同じ質問をしているようですが、私はそれを知りませんでした。謝罪。提供される答えは異なります! 実質的に私はそれを観察しました: >>> def without_else(param=False): ... if param: ... return 1 ... return 0 >>> def with_else(param=False): ... if param: ... return 1 ... else: ... return 0 >>> from timeit import Timer as T >>> T(lambda : without_else()).repeat() [0.3011460304260254, 0.2866089344024658, 0.2871549129486084] >>> T(lambda : with_else()).repeat() [0.27536892890930176, 0.2693932056427002, 0.27011704444885254] >>> …

7
どちらが最速ですか?SELECT SQL_CALC_FOUND_ROWS FROM `table`、またはSELECT COUNT(*)
SQLクエリによって返される行数を制限する場合、通常はページングで使用されますが、レコードの合計数を決定するには2つの方法があります。 方法1 SQL_CALC_FOUND_ROWS元のにオプションを含め、SELECT次のコマンドを実行して行の総数を取得しますSELECT FOUND_ROWS()。 SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS(); 方法2 クエリを通常どおり実行し、次のコマンドを実行して行の総数を取得します SELECT COUNT(*) SELECT * FROM table WHERE id > 100 LIMIT 10; SELECT COUNT(*) FROM table WHERE id > 100; どの方法が最善/最速ですか?

4
整数の範囲を指定してオプティマイザにヒントを与えることはできますか?
intタイプを使用して値を格納しています。プログラムのセマンティクスにより、値は常に非常に小さな範囲(0〜36)で変化し、int(a charではなく)はCPUの効率のためにのみ使用されます。 このような小さな範囲の整数に対して、多くの特別な算術最適化を実行できるようです。これらの整数に対する多くの関数呼び出しは、「魔法の」操作の小さなセットに最適化される可能性があり、一部の関数は、テーブルルックアップに最適化されることもあります。 それで、これintが常にその小さな範囲にあることをコンパイラーに伝えることは可能ですか?そしてコンパイラーがそれらの最適化を行うことは可能ですか?


2
なぜラムダは単純な関数よりもコンパイラによって最適化できるのですか?
彼の本の中でThe C++ Standard Library (Second Edition)Nicolai Josuttisは、ラムダは単純な関数よりもコンパイラによってより最適化できると述べています。 さらに、C ++コンパイラは、通常の関数よりもラムダを最適化します。(213ページ) 何故ですか? インライン化に関しては、これ以上何の違いもないはずだと思いました。私が考えることができる唯一の理由は、コンパイラーがラムダを使用したより良いローカルコンテキストを持っている可能性があり、そのようなことがより多くの仮定を行い、より多くの最適化を実行できるためです。

7
Java NIO FileChannelとFileOutputstreamのパフォーマンス/有用性
ファイルシステムへのファイルの読み取りと書き込みにnioを使用する場合FileChannelと通常の場合を使用した場合のパフォーマンス(または利点)に違いがあるかどうかを把握しようとしFileInputStream/FileOuputStreamています。私は自分のマシンで両方とも同じレベルで実行することを観察しましたFileChannel。これら2つの方法を比較した詳細を教えてください。これが私が使用したコードです、私がテストしているファイルは周りにあり350MBます。ランダムアクセスやその他の高度な機能を検討していない場合、ファイルI / OにNIOベースのクラスを使用するのは良いオプションですか? package trialjavaprograms; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class JavaNIOTest { public static void main(String[] args) throws Exception { useNormalIO(); useFileChannel(); } private static void useNormalIO() throws Exception { File file = new File("/home/developer/test.iso"); File oFile = new File("/home/developer/test2"); long …

21
トリッキーなGoogleインタビューの質問
私の友人が就職の面接をしています。インタビューの質問の1つが私に考えさせられました。 2つの負でない整数があります:iとj。次の方程式が与えられた場合、出力がソートされるようにiとjを反復する(最適な)解を見つけます。 2^i * 5^j したがって、最初の数ラウンドは次のようになります。 2^0 * 5^0 = 1 2^1 * 5^0 = 2 2^2 * 5^0 = 4 2^0 * 5^1 = 5 2^3 * 5^0 = 8 2^1 * 5^1 = 10 2^4 * 5^0 = 16 2^2 * 5^1 = 20 2^0 * 5^2 = …

23
if-elseステートメントを切り替える利点
switchステートメントを使用する場合と、約10のアクションが予想される(現在は同じアクションである)列挙型if30 に対してステートメントを使用する場合のベストプラクティスは何ですかunsigned。パフォーマンスとスペースを考慮する必要がありますが、重要ではありません。スニペットを抽象化したので、命名規則を気にしないでください。 switch ステートメント: // numError is an error enumeration type, with 0 being the non-error case // fire_special_event() is a stub method for the shared processing switch (numError) { case ERROR_01 : // intentional fall-through case ERROR_07 : // intentional fall-through case ERROR_0A : // intentional fall-through case ERROR_10 …

20
「for(;;)」は「while(TRUE)」よりも高速ですか?そうでない場合、なぜ人々はそれを使うのですか?
for (;;) { //Something to be done repeatedly } こういうのがよく使われているのを見てきましたが、なかなかおかしいと思いますが…とか、そういうふうに言った方がわかりやすいと思いませんwhile(true)か? 私は(プログラマーの多くが暗号コードに頼る理由と同じように)これがわずかなマージンであると思っていますか? なぜ、そしてそれは本当に価値があるのでしょうか?もしそうなら、なぜそれをこのように定義しないのですか: #define while(true) for(;;) 参照:どちらが速いか:while(1)またはwhile(2)?

21
ディズニーのFastPassは有効または有用なキュー理論です
ディズニーワールドでは、彼らはファストパスと呼ばれるシステムを使用して、人気のある乗り物の2番目の短いラインを作成します。アイデアは、通常は1時間を超える待機で標準回線で待機するか、指定した時間ブロック(通常は数時間後)に戻って10だけ待機するFastPassを取得できるというものです。分以下。FastPassを使用すると、一度に1つの乗り物だけを「待機」することができます。 私はこの概念の背後にあるキューの理論を理解しようと努めてきましたが、私が見つけた唯一の説明は、それが人々を行列から外し、追加の収益をもたらすもの(ショッピング、食事など)を行うように設計されているということです。 これがFastPassが実装された理由ですか、それともそれが解決する実際のビジター効率の問題がありますか?同様のロジックを適用したソフトウェアアプリケーションはありますか?同様のロジックを適用する必要があるソフトウェアアプリケーションはありますか? ソフトウェアで同様のものを実装するときに発生する問題の1つは、ユーザーがキューを選択することに基づいていることです。ソフトウェアの待機サイクルを高速化します。この理論を適切に適用するには、エンドユーザーの選択を必要とせずに、ニーズに基づいてユーザーを配置するキューを知るのに十分なほどスマートである必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.