1、15.082 和 6.855J 2003年2月25日,基数堆动画,2,从AMO来的例子 (有一点小改动),1,0,1,2 3,4 7,8 15,16 31,32 63,初始化距离标号,把结点插入到桶中.,初始化桶和它们的范围.,2,3,4,5,6,3,选择,1,0,1,2 3,4 7,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,选择有最小距离标号的结点,0,2,3,4,5,6,1,4,更新,3,0,1,2 3,4 7,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,扫描从结点 1 出来的弧,更新
2、距离标号.,2,3,4,5,6,1,13,2,0,15,4,20,5,5,选择,3,0,1,2 3,4 7,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,选择有最小距离标号的结点,0,6,1,2,4,5,结点 3 有标号 0, 它是最小的.,13,0,15,20,3,6,更新,3,0,1,2 3,4 7,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,扫描从结点 3 出来的弧,更新距离标号.,0,6,1,2,4,5,13,0,15,20,3,9,5,7,选择: 部分 1,0,1,2 3,4 7,8
3、 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,通过从左到右扫描,寻找第一个非空桶.,0,6,1,2,4,13,0,15,20,3,9,5,8,选择: 部分 2,0,1,2 3,4 7,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,通过扫描在桶中的所有的结点,判断在桶中的最小距离值.,0,6,1,2,4,13,0,15,20,3,9,5,d(5) = 9, 它是最小的.,9,选择: 部分 3,0,1,2 3,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,
4、0,重分配 桶 5 的范围到前 4 个桶,从值 9 开始. 桶的宽度保持一致,除了一些会变小的桶.,0,6,1,2,4,13,0,15,20,3,9,5,9,10,11 12,4 7,13 15,10,选择: 部分 4,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,重插入 结点到正确的桶内. 通过向左扫描判定桶.,0,6,1,2,4,13,0,15,20,3,9,5,9,10,11 12,4,2,5,在这时候,最左边的桶非空.,11,选择: 部分 5,0,1,2 3,13 15,8 15,16 31,32 63,1,
5、2,4,5,3,6,13,5,2,8,15,20,9,0,从最左边的桶选择一个结点.,0,6,1,13,0,15,20,3,9,9,10,11 12,4,2,5,5,12,更新,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,扫描从结点 5 出来的弧, 更新距离标号.,0,6,1,13,0,15,20,3,9,9,10,11 12,4,2,5,17,6,通过向左扫描,重插入结点到正确的桶中.,13,选择: 部分 1 和 2,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,
6、2,8,15,20,9,0,寻找最小非空桶.,0,1,13,0,15,20,3,9,9,10,11 12,4,2,5,17,6,在桶里寻找最小距离标号,14,选择: 部分3 和4,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,重分发在最小桶中桶范围,0,1,13,0,15,20,3,9,9,10,11 12,4,2,5,17,6,重插入结点到正确的桶.,13,14,15,2,4,15,选择: 部分 5,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,
7、9,0,从最左桶选择结点.,0,1,13,0,15,20,3,9,9,10,11 12,5,17,6,13,14,15,2,4,2,16,更新,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,扫描从结点 2 出来的弧.,0,1,13,0,15,20,3,9,9,10,11 12,5,17,6,13,14,15,4,2,17,选择, 修改规则 1,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,寻找最小非空桶,0,1,13,0,15,20,3,9
8、,9,10,11 12,5,17,6,13,14,15,4,2,如果桶宽度是 1,选择在桶中的任何一结点.,4,18,更新,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,扫描从结点 4 发出的弧,0,1,13,0,15,20,3,9,9,10,11 12,5,17,6,13,14,15,2,4,19,选择: 修改的规则 2,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,寻找最下非空桶,0,1,13,0,15,20,3,9,9,10,11 12,5,17,6,13,14,15,2,4,如果桶内有一单独结点,那么选择该结点.,6,修改的规则和启发式方法在实践中经常很有帮助,但是必须小心使用.,20,算法结束,0,1,2 3,13 15,8 15,16 31,32 63,1,2,4,5,3,6,13,5,2,8,15,20,9,0,没有弧可更新.,0,1,13,0,15,20,3,9,9,10,11 12,5,17,13,14,15,2,4,没有结点需要被永久地标号了.,6,