我想找到数组中的最小和次小数。我可以扫描两次,或者我可以用两次比较扫描一次。哪个有效?在两次比较中执行一次的循环或在一次比较中执行两次的循环中哪一个是有效的?
回答
一次扫描应该更快,因为您可以只保留两个分隔符变量最小和次小。您将在平均值上使用,每次迭代少于两次比较(与使用正好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