【问题标题】:Recursion vs classic algorithm complexity? [closed]递归与经典算法复杂度? [关闭]
【发布时间】:2022-01-05 06:33:25
【问题描述】:

递归函数在许多情况下都很有效,并广泛用于实现以下算法:

  • 搜索算法 -> 二分搜索
  • 排序算法 -> 合并排序

如果我们将递归函数 O(logn) 或 O(nlogn) 的时间复杂度成本与传统算法进行比较,我们的思维方式很容易分析。

但是,如果我们讨论为更复杂的任务编写递归函数的复杂性,我们的大脑逻辑就很难分析它是如何完美工作的。

这里的问题是否意味着编写一个复杂函数的模式,使其表现得像计算机的工作方式比我们的大脑实际上如何看待计算机的工作方式更有效率?!

【问题讨论】:

  • 每个递归表达的程序也可以迭代表达。 Python 不支持尾调用优化,因此这里不考虑在内。因此,最好的算法将不依赖于那个选择,而只依赖于它的具体实现。高度优化的代码往往难以理解,但您的问题目前还不清楚。
  • 计算机和大脑的工作方式非常不同,所以是的,如果您针对其中之一进行强烈优化,您很可能会牺牲另一个方面的性能。因此,您需要在两者之间进行折衷,尽可能选择可读性,并且仅在绝对必要时才选择计算性能。
  • 我很难理解这个问题的细微差别,但您似乎认为递归函数更难编写和分析,但比迭代函数更有效。我想这部分是主观的,但我认为这几乎是完全倒退的。特别是,很少有优化的递归用例,主要是当算法自然递归并且与正在完成的其他工作相比,函数调用的成本很小。以合并排序为例。
  • 我不明白这个问题,除非它问的是同义反复:“针对计算机如何工作进行优化比针对计算机如何不工作进行优化更好?”
  • 我不确定这个问题是否适合stackoverflow——因为“大脑如何看待计算机的工作方式”是主观的,并且所有算法的范围可能是自然递归的,也可能不是自然递归的太宽泛了。很明显,编写优化代码通常非常困难,而且通常可以获得很大的效率提升(即使不改变算法,通常也会快几倍)。

标签: python algorithm recursion


【解决方案1】:

每个递归表达的程序也可以迭代表达。 Python 不支持尾调用优化,因此这里不考虑在内。因此,最好的算法将不依赖于那个选择,只依赖于它的具体实现。

高度优化的代码往往难以理解,因为计算机和大脑的工作方式截然不同。因此,如果您对其中一个进行了强烈优化,那么您很有可能会牺牲另一个的性能。您需要在两者之间进行折衷,尽可能选择可读性,并且仅在绝对必要时才选择计算性能。

【讨论】:

  • @Oghli 为什么要删除问题?其他人可能有类似的想法/问题,并且在 cmets 中有一些有价值的建议。
猜你喜欢
  • 2021-05-28
  • 2017-11-20
  • 1970-01-01
  • 2013-04-28
  • 2011-02-12
  • 2015-05-13
相关资源
最近更新 更多