2016-07-14 132 views
2

對某些變量使用long long時,Codeforces上的某些任務會導致「TLE」(超出時間限制),而將其更改爲int會導致「已接受」。爲什麼用int提高性能取代long long?

該問題如何影響代碼?編譯器如何處理它?爲什麼使用int時代碼更快?

+0

可以在32位系統上運行64位算術運算,但忽略時間複雜度。 O(1)表示奇妙的時間複雜性,但O(1)可能需要145億年。由於第一個算法的緩存處理不當,您可以使O(log(n))比O(n)花費更長的時間。應該更快,並不意味着更快。算法可能很棒,但是實現仍然可能很糟糕或不切實際。 – user4581301

+2

措施。 [[[[[[[ –

回答

6

這在很大程度上取決於平臺。下面舉例說明了使用long long可能會減慢你的代碼的兩個實例:

  1. 如果CPU是不是64位(假設long long是64位和int爲32位),然後有參與執行操作更多的工作如添加。
  2. 如果您正在處理大量數據,從int更改爲long long可能會產生很大的影響,因爲數據是兩倍大。將數據從磁盤或RAM拉到CPU緩存很昂貴,如果數據類型是兩倍大,CPU必須更頻繁地請求數據。
相關問題