我想找到數組中的最小和次小數。我可以掃描兩次,或者我可以用兩次比較掃描一次。哪個有效?在兩次比較中執行一次的循環或在一次比較中執行兩次的循環中哪一個是有效的?
回答
一次掃描應該更快,因爲您可以只保留兩個分隔符變量最小和次小。您將在平均值上使用,每次迭代少於兩次比較(與使用正好2倍數量的單循環比較的2次獨立循環相比)。
在某種僞
smallest = Inf
2ndSmallest = Inf
for elem in array
if elem < smallest
2ndSmallest = smallest
smallest = elem
else if elem < 2ndSmallest
2ndSmallest = elem
end
end
凡這是假定你進入上面的,如果完全在至少兩次(你可以輕鬆地添加一個修補程序的情況下,這可能並非如此)條款。然而,討論是更喜歡的,所以我會留下寫下實際的比較實施作爲練習。
經驗法則:避免多次循環
拇指的第二個規則:避免過早優化(可讀性和可維護性第一)
這就是說,高效的算法
(請注意,你需要的僞代碼以處理列表大小爲空或一個的情況):
smallest = min(list[0],list[1])
second_smallest = max(list[0],list[1])
for el in list[2:]:
if el < second_smallest:
second_smallest = max(el,smallest)
smallest = min(el,smallest)
是不是避免多個循環過早優化的一個實例?我在計算機體系結構中閱讀了它。他們說,如果迭代多次,你就會失去緩存。在進一步推進之前,關注一塊陣列並儘可能多地做好工作。但是利用系統緩存是一個過早的優化,因此是不好的。 –
是的,但多個循環也會影響可讀性。所以,重點是首先關注可讀性和可維護性。那麼,如果你正在尋求優化,一般的經驗法則是循環是昂貴的,然後...不是。 – Harrichael
- 1. 爲什麼循環會比循環體多執行一次?
- 2. 在一個語句中一次比較兩次評估數
- 3. 執行兩次的循環結果
- 4. 的循環將不會執行兩次
- 5. 在執行函數一次循環
- 6. 兩次比較
- 7. 比較兩次
- 8. INSERT INTO調用一次,但運行兩次(不是在一個循環中)
- 9. C++ Arduino,一次運行兩個循環?
- 10. python for循環的最後一行執行兩次
- 11. for循環的最後一行執行兩次?
- 12. for循環讀取前執行兩次
- 13. 在foreach循環中一次執行一個API調用
- 14. 奇怪的兩次在JavaScript中的雙循環執行
- 15. 在一個類文件中多次執行比較器
- 16. 在vba中循環兩次?
- 17. Python for循環只執行一次?
- 18. 如何僅執行一次循環
- 19. 第一次迭代後執行循環
- 20. while循環只執行一次
- 21. Python for循環僅執行一次
- 22. python嵌套循環只執行一次
- 23. for循環僅執行一次
- 24. 鈦for循環只執行一次
- 25. 爲什麼循環只執行一次?
- 26. 循環不會執行一次以上
- 27. 雖然循環執行一次(?)
- 28. For循環只執行一次?
- 29. Java:for循環只能執行一次
- 30. php循環mysql只執行一次
您正在使用哪種語言?你有沒有試圖比較使用系統的當前時間在毫秒? – elias