这个问题与编程逻辑有关,而不是编程本身。 我目前正在编写一个包含两个列表的程序;一个用于人(带有人物对象),另一个用于礼物(书籍、电影等)
简而言之,该计划的目标是将所有礼物发送给名单上的人(包括是否接受礼物的代码。如果是:礼物消失,如果不是:礼物会保存给下一个人)。
我的问题如下:我是否遍历人员列表(外循环),然后迭代礼物(内循环)以查看某人是否想要该特定礼物,这重要吗?或者我必须先循环遍历礼物(外部),然后循环遍历每个人(内部)以查看是否有人接受一份礼物?
因此,我必须使用替代方案 (A) 或 (B) 的结构(此处以伪代码形式提供),我如何知道哪个是最好的?
(A)
for (list of people) {
for(list of gifts) {
//Se if person wants gift
}
}
(B)
for (list of gifts) {
for(list of people) {
//Se if gift is accepted by a person
}
}
最佳答案
我不同意大多数答案所隐含的原则,即顺序不影响性能。当然,在这样一个很小的案例中,只有50个人和200份礼物,差异可以忽略不计。但考虑一个更极端的情况,有 2 个人和 1,000,000 份礼物。
- 在选项 A 中,people 变量的值更改了两次,而gifts 的值更改了两次 变量改变值 200 万次。变量赋值总数 1,000,002。
- 在选项 B 中,gifts 变量的值更改了 100 万次,并且 people 变量改变值 200 万次。变量赋值总数 3,000,000。
这两个选项中的嵌套循环内可能会完成相同的计算工作,但管理嵌套循环的计算管理工作有所不同。即使抛开根据礼物接受情况提前跳出循环可能实现的优化,通过将值较少的变量作为外循环也会提高性能。
关于java - 循环顺序: how to choose the outer loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811192/