Algorithm 我们应该把这两份清单排序,然后合并,还是反过来?
如果我有两个数字列表,为了能够得到一个单独的排序列表,我应该先对单个数字进行排序,然后进行合并排序,还是应该将两个列表合并为一个列表,然后应用有效的排序算法?如果它们还没有排序,我会将它们合并并进行单独排序。如果将它们分开排序然后进行合并排序更有效,那么最有效的排序算法就是这样构建的:任意将列表一分为二,分开排序然后合并。但事实并非如此,因此……如果它们还没有被排序,我会将它们组合起来,然后进行单一排序。如果将它们分开排序然后进行合并排序更有效,那么最有效的排序算法就是这样构建的:任意将列表一分为二,分开排序然后合并。但事实并非如此,因此……你可以用任何一种方式进行论证;这取决于许多因素: 列表A和B的选项为:Algorithm 我们应该把这两份清单排序,然后合并,还是反过来?,algorithm,Algorithm,如果我有两个数字列表,为了能够得到一个单独的排序列表,我应该先对单个数字进行排序,然后进行合并排序,还是应该将两个列表合并为一个列表,然后应用有效的排序算法?如果它们还没有排序,我会将它们合并并进行单独排序。如果将它们分开排序然后进行合并排序更有效,那么最有效的排序算法就是这样构建的:任意将列表一分为二,分开排序然后合并。但事实并非如此,因此……如果它们还没有被排序,我会将它们组合起来,然后进行单一排序。如果将它们分开排序然后进行合并排序更有效,那么最有效的排序算法就是这样构建的:任意将列表一分
- 列表的大小
- 列表中值的范围(最小值、最大值)(因为在某些情况下可以使用O(n)排序)
- 无论它们是近似排序、近似反向排序、完全随机还是其他
- 外部存储器是否允许、禁止等
- 无论是在内存中排序还是在文件中排序
- 无论列表的大小是相同还是一个比另一个长得多
简言之,“视情况而定”,但如果列表已经被拆分,并且您的排序算法对列表长度敏感,那么您可以从选项(2)中获得一些好处。您可以通过任何一种方式进行论证;这取决于许多因素: 列表A和B的选项为:
- 列表的大小
- 列表中值的范围(最小值、最大值)(因为在某些情况下可以使用O(n)排序)
- 无论它们是近似排序、近似反向排序、完全随机还是其他
- 外部存储器是否允许、禁止等
- 无论是在内存中排序还是在文件中排序
- 无论列表的大小是相同还是一个比另一个长得多
简言之,“视情况而定”,但如果列表已经拆分,并且您的排序算法对列表长度敏感,您可以从选项(2)中获得一些好处。为什么这是标记机器学习?拆分为两个列表是最有效的排序算法工作的方式;-)为什么这是标记机器学习?分成两个列表是最有效的排序算法工作的方式;-)最有效的排序算法(合并排序、快速排序)就是这样构建的。希普索尔是个例外。你在想什么算法?插入排序?对于几乎排序的数据,这可能很快,但最坏情况下的效率很差(O(n^2))。最有效的排序算法(mergesort,quicksort)就是这样构建的。希普索尔是个例外。你在想什么算法?插入排序?这在几乎排序的数据上可能很快,但最坏情况下的效率很差(O(n^2))。我能想到的唯一一种情况是,如果A的几乎所有元素都小于B的几乎所有元素,并且您使用了类似插入排序的算法,它在几乎排序的输入上表现良好。但是在这种情况下,InsertionSortTime(A concat B)所需的时间大约与InsertionSortTime(A)+InsertionSortTime(B)一样长,因此改进只是一个不变的因素:合并两个列表和串联两个列表之间的差异(两者都是O(n)操作,但合并也需要O(n)比较)。+1我还认为(2)是“几乎总是”更好。合并对元素顺序不敏感,因此当排序不是O(n)时,比如计数和基数,通常情况下,较小列表上的排序应该首先有帮助。我能想到的唯一一种情况是,如果A的几乎所有元素都小于n,那么(1)会更好