Algorithms
Algorithms copied to clipboard
有个问题想请教
您好,我最近在看《算法》,里面的索引优先队列有地方理解不了,insert方法里,直接令qp[k] = N,但是后面不是swim(N)了吗?这样索引k的位置应该不是N了吧,我自己在网上查了很多,但都是这样的,我感觉理解不了,希望您能给我讲解一下,谢谢。另外,星星已给。
如果swim()执行了,则pq数组和qp数组都变了,比如执行两次insert,insert(0,X),insert(1,A),在插入第二条信息的时候满足keys[0]>keys[1],交换数据,交换的是pq中记录的index,pq由原来的pq[1]=0,pq[2]=1变为pq[1]=1,pq[2]=0,由于qp是pq的逆序所以也要更新,由qp[0]=1,qp[1]=2变为qp[0]=2,qp[1]=1 https://github.com/xiaoyuzdy/Algorithms/blob/master/Algorithms/src/Number_2/IndexOfMinPQ_and_IndexOfMaxPQ.java
谢谢!我知道了,在exch方法里会使qp跟随pq变化而变化,因为只有需要exch的时候pq里的值才会移动。而qp只要始终满足qp[pq[i]] = i, qp[pq[j]] = j就行了。谢谢!