首页 / 知识
关于算法:有效获取排序列表的排序总和
2023-04-11 14:10:00

Efficiently get sorted sums of a sorted list您有一个升序的数字列表,您可以想到哪种最有效的算法来获得该列表中每两个数字之和的升序列表。结果列表中的重复项无关紧要,可以根据需要删除或避免重复。 需要明确的是,我对算法感兴趣。随意以您喜欢的任何语言和范例发布代码。 截至2018年编辑:您可能应该停止阅读此内容。 (但是我无法删除它,因为它已被接受。) 如果您这样写出总和:
您会注意到,由于M [i,j] <= M [i,j 1]和M [i,j] <= M [i 1,j],所以您只需要检查左上角"角",然后选择最低的角。 例如
当然,当您的左上角有很多东西时,此解决方案就会发生变化。 我很确定这个问题是Ω(n2),因为您必须计算每个M [i,j]的总和-除非有人对总和有更好的算法:) 我想我不会逐步进行编码,而是逐步地对其进行伪编码并解释我的逻辑,以便更好的程序员在必要时可以在我的逻辑上戳破洞。 第一步,我们从长度为n的数字列表开始。对于每个数字,我们都需要创建一个长度为n-1的列表,因为我们没有在其自身上添加数字。到最后,我们有了一个在O(n ^ 2)时间内生成的大约n个排序列表的列表。
在步骤2中,因为列表是按设计排序的(向排序列表中的每个元素添加一个数字,列表仍将排序),所以我们可以简单地通过将每个列表合并在一起进行合并排序,而不是对整个批次进行合并排序。最后,这应该花费O(n ^ 2)时间。
然后,合并方法将成为常规合并步骤,并进行检查以确保没有重复的总和。我不会写出来,因为任何人都可以查找mergesort。 这就是我的解决方案。整个算法为O(n ^ 2)时间。随时指出任何错误或改进。 您可以使用 在python的两行中执行此操作
此操作的成本是 集合的大小可能与 但是,如果您想选择结果的前k个元素,则可以使用Frederickson和Johnson的排序算法 @deuseldorf,彼得 无论您做什么,都没有对输入值的附加约束,您做不到比O(n ^ 2)好,这仅仅是因为您必须遍历所有数字对。迭代将主导排序(您可以在O(n log n)或更快的速度中进行排序)。 这个问题已经困扰我大约一天了。太棒了。 无论如何,您无法轻易摆脱它的n ^ 2性质,但是由于可以绑定范围以插入每个元素,因此合并可以做得更好一些。 如果您查看生成的所有列表,则它们具有以下形式: 如果将其翻转90度,则会得到: 现在,合并过程应采用两个列表 这意味着您应该按照 在SQL中:
C#LINQ:
我能想到的最好的办法是生成每对和的矩阵,然后将这些行合并在一起,即a-la合并排序。我感觉好像缺少一些简单的见解,这些见解将揭示一种更有效的解决方案。 我的算法,在Haskell中:
我发现了一个较小的改进,该改进更适合基于延迟流的编码。而不是成对合并列,而是一次合并所有列。好处是您可以立即开始获取列表的元素。
但是,如果您知道要使用所有总和,并且提早获得其中的一部分并没有好处,请使用' 如果您正在寻找一种真正的语言不可知的解决方案,那么在我看来,您将非常失望,因为您将陷入for循环和一些条件句中。但是,如果您向功能语言或功能语言功能(例如LINQ)开放它,那么我的同事可以在此页面中使用Ruby,Lisp,Erlang等形式的精美示例。 |
最新内容
相关内容
python如何打印列表长度
python如何打印列表长度,培训,技术,概念,项目,列表,长度,数组,方法,鲜为人知,初始化,首先,我们需要明确的一点就是Python是没有数组这一概念的python如何打印列表
python如何打印列表,代码,培训,列表,参数,语句,结果,定义,切片,函数,后面,Python列表的打印方法如下我们知道,Python打印列表一般是要用for…ipython如何实现对Python中列表的排
python如何实现对Python中列表的排序?,培训,工作,实例,方法,关键字,对象,函数,以上,列表,表达式,对List进行排序,Python提供了两个方法方法1.python如何创建数值列表
python如何创建数值列表,数字,培训,代码,数据,列表,数值,函数,结果,实例,上述,python如何创建数值列表1、在数据可视化中,处理的几乎都是由数python处理列表的部分元素
python处理列表的部分元素,培训,元素,切片,列表,部分,索引,负数,末尾,函数,称之为,python处理列表的部分元素1、处理列表的部分元素称之为切python归并排序的基本思路
python归并排序的基本思路,培训,数组,基本思路,两个,分解,表示,列表,指针,归纳,序列,python归并排序的基本思路基本思路归纳排序是采用分治法python轮盘赌算法如何使用
python轮盘赌算法如何使用,个体,规模,培训,状态,种群,算法,概率,列表,个人,精髓,python轮盘赌算法如何使用说明1、轮盘赌算法的精髓是可以根python列表中有哪些内置函数
python列表中有哪些内置函数,情况,培训,函数,列表,元素,素数,总和,字符串,数值,字典,python列表中有哪些内置函数在Python中,与列表相关的内置python用切片复制列表
python用切片复制列表,培训,列表,切片,索引,方法,赋值,实例,根据,以上,两个,python中用切片复制列表1、说明(1)需要根据现有列表制作新列表,可js-数字可以私有数据进行初始化
js-数字可以私有数据进行初始化,js-,数字,可以,是,或者,对象,数字,可以,是,,数字可以是数字或者对象数字可以私有数据进行初始化,就