相关疑难解决方法(0)

更糟糕的是更好.有一个例子吗?

有没有一种被广泛使用的算法,该算法的时间复杂度更差比其它已知的算法,但它是一个更好的选择,所有的实际情况(更糟糕的复杂性,但更好的,否则)?

可接受的答案可能是以下形式:

有算法AB具有O(N**2)O(N)时间复杂性相应,但B 具有这样的大常数,它没有优于A为小于一个数量在宇宙原子的输入.

答案中的示例突出显示:

  • 单纯形算法 - 最坏情况是指数时间 - 凸优化问题的已知多项式时间算法相比.

  • 中位数算法的中位数 - 最坏情况O(N**2)已知O(N)算法.

  • 回溯正则表达式引擎 - 最坏情况指数基于O(N)Thompson NFA的引擎.

所有这些示例都利用了最坏情况和平均情况.

是否存在不依赖于最坏情况与平均情况之间差异的示例?


有关:

  • "更糟糕的是更好"的崛起.(出于这个问题的目的,"更糟的是更好"这个短语用于比文章更窄的(即 - 算法时间复杂度)意义上)

  • Python的设计理念:

    ABC集团力求完美.例如,他们使用基于树的数据结构算法,这些算法被证明是渐近大型集合的最佳选择(但对于小型集合来说并不是那么好).

    如果没有能够存储这些大型集合的计算机(换句话说,大型集合在这种情况下不够大),这个例子就是答案.

  • 用于方阵乘法的Coppersmith-Winograd算法是一个很好的例子(它是最快的(2008),但它不如更差的算法).还有其他人? 来自维基百科的文章:"它并没有在实践中使用,因为它只为矩阵提供了一个优势,使它们无法被现代硬件处理(Robinson 2005)."

algorithm time-complexity

47
推荐指数
11
解决办法
5770
查看次数

从Python中的列表中获取N Min或Max元素的快速方法

我目前有一个很长的列表,正在使用lambda函数f进行排序.然后我从前五个元素中选择一个随机元素.就像是:

f = lambda x: some_function_of(x, local_variable)
my_list.sort(key=f)
foo = choice(my_list[:4])
Run Code Online (Sandbox Code Playgroud)

根据剖析器,这是我程序中的瓶颈.我怎样才能加快速度?是否有一种快速,内置的方式来检索我想要的元素(理论上不需要对整个列表进行排序).谢谢.

python sorting

6
推荐指数
1
解决办法
3806
查看次数

如何获得最多N个元素

我知道如何获得单一最大值:

m = max([1,2])
2
Run Code Online (Sandbox Code Playgroud)

我如何获得最大n元素?例如:

m = max([1,2,3,4,5], n=2)
[4,5]
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
2
解决办法
3992
查看次数

标签 统计

python ×2

algorithm ×1

sorting ×1

time-complexity ×1