6-3 Young
Last updated
Last updated
最小Young氏矩阵和最小堆的思想差不多,可以通过比较两者的同异来理解Young氏矩阵
header 1
min-Heap
min-Young
堆顶(最小值)
H[1]
Y[i][j]
最后一个元素的位置
H[N]
Y[N][N]
最后一个元素
不一定是最大值
一定是最大值
parent
H[i]的parent是H[i/2]
Y[i][j]的parent是Y[i-1][j]和Y[i][j-1]
child
H[i]的child是H[i2]和H[i2+1]
Y[i][j]的child是Y[i+1][j]和Y[i][j+1]
find(x)
从H[1]开始遍历
从西南角开始,或当前值小于key,则向东走,否则向北走
1.堆顶是最小值所在的位置
2.parent的值<=child的值
3.空条件:堆顶元素值为INIT
4.满条件:最后一个元素的值不为INIT
5.delete:插入到最后一个元素的位置,然后向parent调整
6.extract:提取堆顶元素,将堆顶元素置为INIT,然后child调整
可以有多种画法
提取Y[1][1],并用ox7FFFFFFF填充。然后向右下调整
将新元素加入到矩阵的Y[m][n]处,然后逐步向上调整
参考产品代码errorType Young::insert(int key)
排序过程为:
step1:取下矩阵Y[1][1]元素,O(1)
step2:将Y[1][1]置为0x7FFFFFFF,O(1)
step3:调整矩阵,O(n)
对所有n^2^个结点各执行以上step1~3一次,因此时间为O(n^3^)
从左下角开找,若比它小,则向上,则比它大,则向右找