可能重复:
递归是否比循环更快?
大约15年前,我第一次接受C语言培训.我的雇主想要高度优化的代码来处理计算困难的任务.我记得不止一次被建议将递归重写为循环,即使是在昂贵的可读性方面,以避免"递归开销".正如我所理解的那样,递归开销是将数据推送到堆栈然后将其弹出所需的额外工作.
现在我用C,Python,Perl编写,有时用Java编写代码,我有时会想到递归.还有什么东西可以通过重写来获得吗?如果它们是尾递归怎么办?现代编译器让所有这些问题都没有实际意义吗?这些担忧是否与解释语言无关?
optimization recursion programming-languages tail-recursion interpreted-language
我正在搜索长度为12的向量空间,条目为0,1,2.例如,一个这样的向量是
001122001122.我有大约一千个好的向量,以及大约一千个坏向量.对于每个坏矢量,我需要找到最接近的好矢量.两个向量之间的距离就是不匹配的坐标数.好的载体并没有特别好地排列,它们"好"的原因似乎没有帮助.我的主要优先事项是算法很快.
如果我进行简单的穷举搜索,我必须计算大约1000*1000的距离.这似乎很头脑.
如果我首先使用好的向量应用Dijkstra算法,我可以计算空间中每个向量的最近向量和最小距离,这样每个坏向量都需要一个简单的查找.但是空间中有3 ^ 12 = 531,441个向量,因此预计算是50万个距离计算.节省不多.
你能帮我想一个更好的方法吗?
编辑:因为人们认真地问他们是什么"好":每个矢量代表六个等边三角形的六边形图片的描述,这是三维立方体的二维图像(想象广义Q-bert).等边三角形是立方体(45-45-90)面的一半,倾斜成透视.六个坐标描述了三角形的性质(感知的地板,左墙,右墙),六个坐标描述了边缘的性质(感知的连续性,两种感知的不连续性).1000个好的向量是那些代表六边形的向量,当看到立方体视角时可以见证这些向量.搜索的原因是将局部校正应用于充满三角形的十六进制映射...