我想写一个递归算法来找到一个最小的元素。 我绘制了一个二叉树,其中叶子代表元素,内部节点是比较后的最小元素。
algo的输入是:
5 3 1 9 8 7 6 10
二叉树:
输出:1
我需要找到一种以某种方式合并这个二叉树的算法。首先比较一对元素,然后将问题减少到n / 2然后n / 4 ..当n变为1时,我们得到答案。
答案 0 :(得分:2)
这是一个在树中找到最小值的函数:
function smallest(tree)
if isEmpty(tree)
return infinity
return min( tree.value,
smallest(tree.leftKid),
smallest(tree.rightKid) )
但我不明白你的问题。如果输入采用数组的形式,则无需构建树。只需按顺序遍历数组比较值,在每一步保持最小值,并在结束时输出最小值。
答案 1 :(得分:2)
让M(i, j)
表示“子阵列”[i...j]
的最小元素。然后是M(i, j) = min(M(i, k), M(k + 1, j))
,如果i < j
(我留给你找出合适的k
)。
此外,您需要处理案例i = j
。
答案 2 :(得分:0)
伪代码:
mydata = [5 3 1 9 8 7 6 10];
n = 8;
while n > 1
for ii = 2 to n Step 2
mydata[ii/2]=min(mydata[ii-1],mydata[ii]);
next ii
n = n/2;
wend