2016-07-14 14 views
2

一部の変数にlong longを使用した場合、Codeforcesのタスクによっては「TLE」(時間制限超過)が発生し、intに変更すると「受け入れ済み」になります。long longをintに置き換えるとパフォーマンスが向上するのはなぜですか?

この問題はどのようにコードに影響しますか?コンパイラはどのようにそれに対処していますか? intを使用するとコードが高速になるのはなぜですか?

+0

32ビットシステムで64ビット算術演算を実行することはできますが、ここでは複雑さは無視してください。 O(1)は幻想的な時間の複雑さを意味しますが、O(1)は145億年かかる可能性があります。最初のアルゴリズムによるキャッシュ処理が正しくないため、O(log(n))がO(n)より長くかかることがあります。より速くなければならないという意味ではありません。アルゴリズムはすばらしいことがありますが、実装はまだ吸うことができないか、非実用的です。 – user4581301

+2

小節。 [[[[[[ –

答えて

6

これはプラットフォームによって大きく異なります。 CPUは(long long 64ビットとintが32ビットであると仮定して)64ビットは、その後の操作を実行する際に関与する多くの作業が存在しない場合

  1. :ここでlong longを使用するコードを遅くすることができる場所の2つのインスタンスであります追加など。
  2. 多くのデータを処理している場合、intからlong longに変更すると、データが2倍になるため大きな影響があります。ディスクまたはラムからCPUキャッシュにデータを引き出すのは高価です。データ型が2倍の場合、CPUはデータを頻繁に要求する必要があります。
関連する問題