Algorithm 如何用离散变量逼近优化算法

Algorithm 如何用离散变量逼近优化算法,algorithm,math,time-complexity,mathematical-optimization,discrete-mathematics,Algorithm,Math,Time Complexity,Mathematical Optimization,Discrete Mathematics,我遇到过一个说有一种比O(n^2)更快的“奇特的离散数学”。我无法理解如何在O(n^2)下完成链接的问题 我将如何用离散方法处理这个问题,以尝试并理解更快的解决方案 任务说明: 在列表中查找“幸运三元组”的数量。“幸运三元组”定义为“在列表lst中,对于类三元组(lst[i],lst[j],lst[k])的任意组合,其中im*log(m)+n*log(m) 在第一种情况下,我们可以通过直接枚举来迭代每个lst[i]s除数,花费时间O(sqrt(lst[i]),并查找已经看到的除数,谁已经记录了看

我遇到过一个说有一种比O(n^2)更快的“奇特的离散数学”。我无法理解如何在O(n^2)下完成链接的问题

我将如何用离散方法处理这个问题,以尝试并理解更快的解决方案

任务说明:


在列表中查找“幸运三元组”的数量。“幸运三元组”定义为“在列表lst中,对于类三元组(lst[i],lst[j],lst[k])的任意组合,其中im。有两种方法可以比
O(n^2)
更快,即
n^2>n*sqrt(m)
n^2>m*log(m)+n*log(m)

在第一种情况下,我们可以通过直接枚举来迭代每个
lst[i]
s除数,花费时间
O(sqrt(lst[i])
,并查找已经看到的除数,谁已经记录了看到的除数。(对于我们的讨论,除数的数量是恒定的,因为在我们的条件下,它的大小与
m
n
相比可以忽略不计。)例如

2 8 5 16

2  -> nothing to do
8  -> divisors 2 4
      record {8: 1 divisor seen}
5  -> no divisors seen
16 -> divisors 2 4 8
      found 8 with 1 count in our record
      
Total 1 triple

在第二种方法中,我们对每个数的最小素数因子从2到->代码> M< /代码>,以便使我们能够在<代码> O(log LST [i])< /C>中列出每个列表元素。然后我们需要一个额外的步骤来生成除数(在我们的条件下,我们可以再考虑常数)。并执行与第一个类似的遍历。如果

n
非常大,这种方法可能会有所帮助,这样即使额外的
m log m
成本也能从中受益。

确切的引语是“可能有更好的算法,可以使用奇特的离散数学来更快地完成它”。在“可能有”和“可能有”之间有很大的区别有"。前者意味着作者不知道这样一个解决方案,后者意味着作者知道这样一个解决方案的存在。也许有一种方法可以将除数链中的元素链接起来,只在原始数组中迭代一次…@user3386109我的问题更多的是关于如何思考这个过程找到这样的解决办法