Algorithm 从4个不同序列的元素中求和x
这是我的问题: 给定一个数字x和4个序列a、B、C和D,每个序列都是n个数字,确定是否存在a中的一些数字a、B中的一些数字B、C中的一些数字C和D中的一些数字D,这样x=a+B+C+D。下面的操作是比较、添加和交换。设计一个有效的算法来解决这个问题,最坏情况下的运行时间小于n^4Algorithm 从4个不同序列的元素中求和x,algorithm,performance,sum,sequences,Algorithm,Performance,Sum,Sequences,这是我的问题: 给定一个数字x和4个序列a、B、C和D,每个序列都是n个数字,确定是否存在a中的一些数字a、B中的一些数字B、C中的一些数字C和D中的一些数字D,这样x=a+B+C+D。下面的操作是比较、添加和交换。设计一个有效的算法来解决这个问题,最坏情况下的运行时间小于n^4 我不知道从哪里开始,希望能得到一些帮助 您可以执行以下操作: 创建对和数组AB=A+B,CD=C+D,方法是对A和B之间的每一对进行求和,并对C和D进行求和(AB和CD各为n^2个元素的数组)O(n^2) 排序数组AB
我不知道从哪里开始,希望能得到一些帮助 您可以执行以下操作:
总之,我们有O(n^2 log(n))您可以执行以下操作:
总之,我们有O(n^2 log(n))你需要找到每个组合吗?他们不需要找到每个组合,只需要满足x=a+b+c+d的组合。但是,如果存在最坏情况下运行时间小于n^4的组合,则检查每个组合将找到解决方案。我认为他们可能需要改进。你需要找到每个组合吗?他们不需要找到每个组合,只需要满足x=a+b+c+d的组合。但是,如果存在最坏情况下运行时间小于n^4的组合,则检查每个组合将找到解决方案。我想他们可能希望在这方面有所改进。这主意不错,但。。。计算最小值是
O(n)
,因此合并阶段是O(n^3)
。使用优先级队列将使其O(n^2 log(n))
。这也是通过更简单的方法实现的:跳过步骤1;将AB=A+B
计算为一个线性数组,并对其排序;与CD
相同;按照第3步和第4步操作。关于最小值,您是对的,我会更新它。但请注意,对大小为n^2的数组进行排序是O(n^2 log(n^2)),因此如果优先级队列产生O(n^2 log(n))复杂度,则优先级队列会更好。log(n^2)=2 log(n)
。它只影响一个渐近常数,我们对此一无所知。这是正确的想法,但。。。计算最小值是O(n)
,因此合并阶段是O(n^3)
。使用优先级队列将使其O(n^2 log(n))
。这也是通过更简单的方法实现的:跳过步骤1;将AB=A+B
计算为一个线性数组,并对其排序;与CD
相同;按照第3步和第4步操作。关于最小值,您是对的,我会更新它。但请注意,对大小为n^2的数组进行排序是O(n^2 log(n^2)),因此如果优先级队列产生O(n^2 log(n))复杂度,则优先级队列会更好。log(n^2)=2 log(n)
。它只影响一个渐近常数,对此我们几乎一无所知。