我正在阅读此处的解决方案:https://leetcode.com/problems/merge-k-sorted-lists/solution/,它介绍了如何将k个排序链表合并成一个链表。
一个简单的解决方案是编写一个函数来处理两个链接列表,并在第一个2个列表上调用它,然后再使用以前的结果和第3个链接列表调用它,然后再次使用以前的结果和第4个链接列表等等。
另一个更有效率的解决方案是进行以下操作:
配对 k 个列表并合并每个成对的列表。
在第一次配对之后,k个列表已经合并为平均长度为2N/k的k/2个列表,然后是k/4、k/8等等。
重复执行此过程,直到我们得到最终排序的链表。
我的问题是:为什么第二种方法更有效率?我不接受这个事实,因为我认为我们按不同的顺序执行相同的工作。那么优化来自哪里?我们使用了哪些事实使它更快?
我在最后一个评论中澄清了我的问题。
一个简单的解决方案是编写一个函数来处理两个链接列表,并在第一个2个列表上调用它,然后再使用以前的结果和第3个链接列表调用它,然后再次使用以前的结果和第4个链接列表等等。
另一个更有效率的解决方案是进行以下操作:
配对 k 个列表并合并每个成对的列表。
在第一次配对之后,k个列表已经合并为平均长度为2N/k的k/2个列表,然后是k/4、k/8等等。
重复执行此过程,直到我们得到最终排序的链表。
我的问题是:为什么第二种方法更有效率?我不接受这个事实,因为我认为我们按不同的顺序执行相同的工作。那么优化来自哪里?我们使用了哪些事实使它更快?
我在最后一个评论中澄清了我的问题。