我正在尝试使用分而治之的方法创建一个算法但使用迭代算法(即没有递归)。
我对如何接近循环感到困惑。
我需要将我的问题分解成更小的子问题,直到我遇到基本情况。我认为这仍然是正确的,但我不知道我怎么能(没有递归)使用较小的子问题来解决更大的问题。
例如,我正在尝试提出一种算法,该算法将找到最接近的一对点(在一维空间中 - 尽管我打算将其自身概括为更高维度)。如果我有一个函数nearest_pair(L),其中L是ℝ中的整数坐标列表,我怎么能得出一个除法并征服可以解决这个问题的迭代算法?
(不失一般性我正在使用Python)
答案 0 :(得分:4)
将任何递归算法转换为迭代算法的廉价方法是采用递归函数,将其置于循环中,并使用自己的堆栈。这消除了函数调用开销以及在堆栈上保存任何不需要的数据。但是,这通常不是“最佳”方法(“最佳”取决于问题和背景。)
他们说你的问题,听起来好像是将列表分成子列表,找到每个中最接近的一对,然后从这两个结果中取出最接近的一对。为了迭代地执行此操作,我认为比上面提到的通用方法更好的方法是开始另一种方式:查看大小为3的列表(有三对要查看)并从那里开始工作。请注意,大小为2的列表很简单。
最后,如果您的坐标是整数,则它们位于Z(R的一个小得多的子集)中。