Knowledge (XXG)

d-ary heap

Source 📝

876:
heap, with insert and delete-min operations, is linear, as it uses no extra storage other than an array containing a list of the items in the heap. If changes to the priorities of existing items need to be supported, then one must also maintain pointers from the items to their positions in the heap,
304:
comparisons to determine the minimum or maximum of the children and then one more comparison against the parent to determine whether a swap is needed. Therefore, the time to delete the root item, to increase the priority of an item in a min-heap, or to decrease the priority of an item in a max-heap,
213:
To insert a new item into the heap, the item is appended to the end of the array, and then while the heap property is violated it is swapped with its parent, moving it upward in the tree and earlier in the array, until eventually the heap property is satisfied. The same upward-swapping procedure may
270:
swaps. In the upward-swapping procedure, each swap involves a single comparison of an item with its parent, and takes constant time. Therefore, the time to insert a new item into the heap, to decrease the priority of an item in a min-heap, or to increase the priority of an item in a max-heap, is
209:
is swapped with one of its children (the one with the smallest priority in a min-heap, or the one with the largest priority in a max-heap), moving it downward in the tree and later in the array, until eventually the heap property is satisfied. The same downward swapping procedure may be used to
657: 493: 68:
This data structure allows decrease priority operations to be performed more quickly than binary heaps, at the expense of slower delete minimum operations. This tradeoff leads to better running times for algorithms such as
504: 860: 197:
The minimum priority item in a min-heap (or the maximum priority item in a max-heap) may always be found at position 0 of the array. To remove this item from the priority queue, the last item
974:
running time of binary heap versions of these algorithms whenever the number of edges is significantly larger than the number of vertices. An alternative priority queue data structure, the
742: 1122:. Note that Tarjan uses 1-based numbering, not 0-based numbering, so his formulas for the parent and children of a node need to be adjusted when 0-based numbering is used. 1117: 194:, in a min-heap, each item has a priority that is at least as large as its parent; in a max-heap, each item has a priority that is no larger than its parent. 83:
behavior than binary heaps, allowing them to run more quickly in practice despite having a theoretically larger worst-case running time. Like binary heaps,
1336: 384: 1177: 378:
cost for the second swap beyond the cost already counted in the first term, etc. Therefore, the total amount of time to create a heap in this way is
1301: 1279: 1160: 652:{\displaystyle {\frac {d}{d-1}}(n-s_{d}(n))-(d-1-(n{\bmod {d}}))\left(e_{d}\left(\left\lfloor {\frac {n}{d}}\right\rfloor \right)+1\right)} 754: 1228:
Naor, D.; Martel, C. U.; Matloff, N. S. (October 1991), "Performance of priority queue structures in a virtual memory environment",
498:
The exact value of the above (the worst-case number of comparisons during the construction of d-ary heap) is known to be equal to:
1418: 1263:
Algorithms and Data Structures: 9th International Workshop, WADS 2005, Waterloo, Canada, August 15–17, 2005, Proceedings
886: 941:, the total times for these two types of operations may be balanced against each other, leading to a total time of 1262: 214:
be used to decrease the priority of an item in a min-heap, or to increase the priority of an item in a max-heap.
1005:-ary heap typically runs much faster than a binary heap for heap sizes that exceed the size of the computer's 1186: 117:
items, each of which has a priority associated with it. These items may be viewed as the nodes in a complete
898: 70: 677: 250:
items in it, both the upward-swapping procedure and the downward-swapping procedure may perform as many as
1348: 1001:
4-heaps may perform better than binary heaps in practice, even for delete-min operations. Additionally, a
998:-ary heaps are generally at least as fast, and often faster, than Fibonacci heaps for this application. 910: 201:
in the array is moved into its place, and the length of the array is decreased by one. Then, while item
1260:
Mortensen, C. W.; Pettie, S. (2005), "The complexity of implicit and space efficient priority queues",
1024:-ary heap, each one taking far more time than the extra work incurred by the additional comparisons a 210:
increase the priority of an item in a min-heap, or to decrease the priority of an item in a max-heap.
128: 124: 108: 906: 1353: 1332: 90: 73:
in which decrease priority operations are more common than delete min operations. Additionally,
1275: 1156: 1052: 230:
and ending at the item at position 0, applying the downward-swapping procedure for each item.
62: 1358: 1313: 1267: 1237: 1064: 93:
that uses no additional storage beyond that needed to store the array of items in the heap.
223:
items, one may loop over the items in reverse order, starting from the item at position
1014: 975: 38: 35: 1266:, Lecture Notes in Computer Science, vol. 3608, Springer-Verlag, pp. 49–60, 1412: 1105: 1068: 902: 1006: 488:{\displaystyle \sum _{i=1}^{\log _{d}n}\left({\frac {n}{d^{i}}}+1\right)O(d)=O(n).} 80: 334:
items, most of the items are in positions that will eventually hold leaves of the
1302:"Elementary Yet Precise Worst-Case Analysis of Floyd's Heap-Construction Program" 191: 42: 351:
items are non-leaves, and may be swapped downwards at least once, at a cost of
1242: 1017: 1010: 1377: 667:(n) is the sum of all digits of the standard base-d representation of n and e 1116:, CBMS-NSF Regional Conference Series in Applied Mathematics, vol. 44, 143:
items are its grandchildren, etc. Thus, the parent of the item at position
1055:(1975), "Priority queues with update and finding minimum spanning trees", 340:-ary tree, and no downward swapping is performed for those items. At most 1317: 1362: 1271: 671:(n) is the exponent of d in the factorization of n. This reduces to 1403: 370:
nodes may be swapped downward two times, incurring an additional
1337:"Shortest paths algorithms: Theory and experimental evaluation" 855:{\displaystyle {\frac {3}{2}}(n-s_{3}(n))-2e_{3}(n)-e_{3}(n-1)} 131:) forms the root of the tree, the items at positions 1 through 51:
children instead of 2. Thus, a binary heap is a 2-heap, and a
582: 1404:
C++ implementation of generalized heap with D-Heap support
283:. In the downward-swapping procedure, each swap involves 205:
and its children do not satisfy the heap property, item
757: 680: 507: 387: 55:
is a 3-heap. According to Tarjan and Jensen et al.,
978:, gives an even better theoretical running time of 854: 736: 651: 487: 359:time to find the child to swap them with. At most 1176:Jensen, C.; Katajainen, J.; Vitale, F. (2004), 1118:Society for Industrial and Applied Mathematics 1155:(2nd ed.), Addison-Wesley, p. 216, 127:: the item at position 0 of the array (using 8: 173:and its children are the items at positions 1028:-ary heap makes compared to a binary heap. 962:for the algorithm, an improvement over the 1295: 1293: 1291: 1352: 1241: 923:decrease-priority operations. By using a 831: 809: 781: 758: 756: 719: 697: 679: 620: 606: 585: 581: 539: 508: 506: 436: 427: 408: 403: 392: 386: 1009:: A binary heap typically requires more 1223: 1221: 1037: 1255: 1253: 1212: 1153:Data Structures and Algorithm Analysis 1114:Data Structures and Network Algorithms 1100: 1098: 877:which again uses only linear storage. 217:To create a new heap from an array of 1142: 1140: 1138: 1136: 1134: 1132: 1130: 1128: 1096: 1094: 1092: 1090: 1088: 1086: 1084: 1082: 1080: 1078: 1047: 1045: 1043: 1041: 919:delete-min operations and as many as 737:{\displaystyle 2n-2s_{2}(n)-e_{2}(n)} 7: 1208: 1206: 1376:Kamp, Poul-Henning (11 June 2010), 913:use a min-heap in which there are 14: 1057:Information Processing Letters 849: 837: 821: 815: 796: 793: 787: 768: 731: 725: 709: 703: 594: 591: 575: 560: 554: 551: 545: 526: 479: 473: 464: 458: 1: 1335:; Radzik, Tomasz (May 1996), 1179:An extended truth about heaps 125:breadth first traversal order 1069:10.1016/0020-0190(75)90001-0 61:-ary heaps were invented by 1300:Suchenek, Marek A. (2012), 137:are its children, the next 1435: 156:) is the item at position 41:, a generalization of the 107:-ary heap consists of an 1341:Mathematical Programming 330:-ary heap from a set of 45:in which the nodes have 1419:Heaps (data structures) 1378:"You're doing it wrong" 1312:(1), IOS Press: 75–92, 1306:Fundamenta Informaticae 1243:10.1093/comjnl/34.5.428 869:The space usage of the 91:in-place data structure 79:-ary heaps have better 1331:Cherkassky, Boris V.; 1147:Weiss, M. A. (2007), " 911:minimum spanning trees 856: 738: 653: 489: 421: 289:comparisons and takes 857: 739: 654: 490: 388: 123:-ary tree, listed in 899:Dijkstra's algorithm 885:When operating on a 755: 678: 505: 385: 129:zero-based numbering 71:Dijkstra's algorithm 1333:Goldberg, Andrew V. 1318:10.3233/FI-2012-751 190:. According to the 1363:10.1007/BF02592101 1272:10.1007/11534273_6 994:, but in practice 852: 748:for d = 2, and to 734: 649: 485: 89:-ary heaps are an 1281:978-3-540-28101-6 1162:978-0-321-37013-6 766: 628: 524: 442: 63:Donald B. Johnson 1426: 1391: 1389: 1373: 1367: 1365: 1356: 1328: 1322: 1320: 1297: 1286: 1284: 1257: 1248: 1246: 1245: 1230:Computer Journal 1225: 1216: 1215:, pp. 77 and 91. 1210: 1201: 1199: 1198: 1197: 1191: 1185:, archived from 1184: 1173: 1167: 1165: 1144: 1123: 1121: 1120:, pp. 34–38 1102: 1073: 1071: 1049: 1027: 1023: 1004: 997: 993: 973: 961: 940: 926: 922: 918: 907:Prim's algorithm 896: 892: 875: 861: 859: 858: 853: 836: 835: 814: 813: 786: 785: 767: 759: 743: 741: 740: 735: 724: 723: 702: 701: 658: 656: 655: 650: 648: 644: 637: 633: 629: 621: 611: 610: 590: 589: 544: 543: 525: 523: 509: 494: 492: 491: 486: 454: 450: 443: 441: 440: 428: 420: 413: 412: 402: 377: 369: 358: 350: 339: 329: 324:When creating a 320: 303: 296: 288: 282: 269: 249: 243: 229: 222: 189: 179: 172: 171: 160: 155: 148: 142: 136: 122: 116: 106: 88: 78: 60: 50: 31: 22: 1434: 1433: 1429: 1428: 1427: 1425: 1424: 1423: 1409: 1408: 1400: 1395: 1394: 1375: 1374: 1370: 1330: 1329: 1325: 1299: 1298: 1289: 1282: 1259: 1258: 1251: 1227: 1226: 1219: 1211: 1204: 1195: 1193: 1189: 1182: 1175: 1174: 1170: 1163: 1146: 1145: 1126: 1104: 1103: 1076: 1051: 1050: 1039: 1034: 1025: 1021: 1002: 995: 979: 963: 956: 942: 928: 927:-ary heap with 924: 920: 914: 897:vertices, both 894: 890: 883: 870: 827: 805: 777: 753: 752: 715: 693: 676: 675: 670: 666: 616: 612: 602: 601: 597: 535: 513: 503: 502: 432: 426: 422: 404: 383: 382: 371: 360: 352: 341: 335: 325: 306: 298: 297:time: it takes 290: 284: 272: 257: 251: 245: 244:-ary heap with 239: 236: 224: 218: 181: 174: 169: 158: 157: 150: 144: 138: 132: 118: 112: 102: 99: 84: 74: 56: 46: 27: 18: 12: 11: 5: 1432: 1430: 1422: 1421: 1411: 1410: 1407: 1406: 1399: 1398:External links 1396: 1393: 1392: 1368: 1347:(2): 129–174, 1323: 1287: 1280: 1249: 1236:(5): 428–437, 1217: 1202: 1168: 1161: 1124: 1108:(1983), "3.2. 1074: 1053:Johnson, D. B. 1036: 1035: 1033: 1030: 1015:virtual memory 976:Fibonacci heap 948: 903:shortest paths 882: 879: 864: 863: 851: 848: 845: 842: 839: 834: 830: 826: 823: 820: 817: 812: 808: 804: 801: 798: 795: 792: 789: 784: 780: 776: 773: 770: 765: 762: 746: 745: 733: 730: 727: 722: 718: 714: 711: 708: 705: 700: 696: 692: 689: 686: 683: 668: 664: 661: 660: 647: 643: 640: 636: 632: 627: 624: 619: 615: 609: 605: 600: 596: 593: 588: 584: 580: 577: 574: 571: 568: 565: 562: 559: 556: 553: 550: 547: 542: 538: 534: 531: 528: 522: 519: 516: 512: 496: 495: 484: 481: 478: 475: 472: 469: 466: 463: 460: 457: 453: 449: 446: 439: 435: 431: 425: 419: 416: 411: 407: 401: 398: 395: 391: 253: 235: 232: 98: 97:Data structure 95: 39:data structure 36:priority queue 13: 10: 9: 6: 4: 3: 2: 1431: 1420: 1417: 1416: 1414: 1405: 1402: 1401: 1397: 1387: 1383: 1379: 1372: 1369: 1364: 1360: 1355: 1354:10.1.1.48.752 1350: 1346: 1342: 1338: 1334: 1327: 1324: 1319: 1315: 1311: 1307: 1303: 1296: 1294: 1292: 1288: 1283: 1277: 1273: 1269: 1265: 1264: 1256: 1254: 1250: 1244: 1239: 1235: 1231: 1224: 1222: 1218: 1214: 1213:Tarjan (1983) 1209: 1207: 1203: 1192:on 2007-06-09 1188: 1181: 1180: 1172: 1169: 1164: 1158: 1154: 1150: 1143: 1141: 1139: 1137: 1135: 1133: 1131: 1129: 1125: 1119: 1115: 1111: 1107: 1106:Tarjan, R. E. 1101: 1099: 1097: 1095: 1093: 1091: 1089: 1087: 1085: 1083: 1081: 1079: 1075: 1070: 1066: 1062: 1058: 1054: 1048: 1046: 1044: 1042: 1038: 1031: 1029: 1019: 1016: 1012: 1008: 999: 991: 987: 983: 977: 971: 967: 959: 955: 951: 946: 939: 935: 931: 917: 912: 908: 904: 900: 888: 880: 878: 873: 867: 846: 843: 840: 832: 828: 824: 818: 810: 806: 802: 799: 790: 782: 778: 774: 771: 763: 760: 751: 750: 749: 728: 720: 716: 712: 706: 698: 694: 690: 687: 684: 681: 674: 673: 672: 645: 641: 638: 634: 630: 625: 622: 617: 613: 607: 603: 598: 586: 578: 572: 569: 566: 563: 557: 548: 540: 536: 532: 529: 520: 517: 514: 510: 501: 500: 499: 482: 476: 470: 467: 461: 455: 451: 447: 444: 437: 433: 429: 423: 417: 414: 409: 405: 399: 396: 393: 389: 381: 380: 379: 375: 367: 363: 356: 348: 344: 338: 333: 328: 322: 318: 314: 310: 301: 294: 287: 280: 276: 268: 264: 260: 256: 248: 242: 233: 231: 227: 221: 215: 211: 208: 204: 200: 195: 193: 192:heap property 188: 184: 177: 168: 164: 153: 147: 141: 135: 130: 126: 121: 115: 110: 105: 96: 94: 92: 87: 82: 77: 72: 66: 64: 59: 54: 49: 44: 40: 37: 33: 30: 24: 21: 1385: 1381: 1371: 1344: 1340: 1326: 1309: 1305: 1261: 1233: 1229: 1194:, retrieved 1187:the original 1178: 1171: 1152: 1148: 1113: 1109: 1063:(3): 53–57, 1060: 1056: 1011:cache misses 1007:cache memory 1000: 989: 985: 981: 969: 965: 957: 953: 949: 944: 937: 933: 929: 915: 884: 881:Applications 871: 868: 865: 747: 662: 497: 373: 365: 361: 354: 346: 342: 336: 331: 326: 323: 316: 312: 308: 299: 292: 285: 278: 274: 266: 262: 258: 254: 246: 240: 237: 225: 219: 216: 212: 206: 202: 198: 196: 186: 182: 175: 166: 162: 151: 145: 139: 133: 119: 113: 103: 100: 85: 81:memory cache 75: 67: 57: 53:ternary heap 52: 47: 28: 26: 19: 17: 15: 1018:page faults 866:for d = 3. 165:− 1)/ 43:binary heap 1196:2008-02-05 1032:References 893:edges and 1382:ACM Queue 1349:CiteSeerX 1151:-heaps", 1112:-heaps", 844:− 825:− 800:− 775:− 713:− 688:− 573:− 567:− 558:− 533:− 518:− 415:⁡ 390:∑ 302:− 1 228:− 1 149:(for any 65:in 1975. 23:-ary heap 1413:Category 631:⌋ 618:⌊ 234:Analysis 180:through 1020:than a 663:where s 1351:  1278:  1159:  315:/ log 277:/ log 273:O(log 265:/ log 261:= log 154:> 0 1190:(PDF) 1183:(PDF) 889:with 887:graph 238:In a 109:array 34:is a 32:-heap 1276:ISBN 1157:ISBN 1013:and 988:log 968:log 909:for 905:and 901:for 874:-ary 311:log 101:The 16:The 1388:(6) 1359:doi 1314:doi 1310:120 1268:doi 1238:doi 1065:doi 947:log 583:mod 406:log 368:+ 1 349:+ 1 305:is 252:log 178:+ 1 111:of 25:or 1415:: 1384:, 1380:, 1357:, 1345:73 1343:, 1339:, 1308:, 1304:, 1290:^ 1274:, 1252:^ 1234:34 1232:, 1220:^ 1205:^ 1127:^ 1077:^ 1059:, 1040:^ 984:+ 980:O( 964:O( 943:O( 932:= 372:O( 353:O( 321:. 307:O( 291:O( 185:+ 183:di 176:di 1390:. 1386:8 1366:. 1361:: 1321:. 1316:: 1285:. 1270:: 1247:. 1240:: 1200:. 1166:. 1149:d 1110:d 1072:. 1067:: 1061:4 1026:d 1022:d 1003:d 996:d 992:) 990:n 986:n 982:m 972:) 970:n 966:m 960:) 958:n 954:n 952:/ 950:m 945:m 938:n 936:/ 934:m 930:d 925:d 921:m 916:n 895:n 891:m 872:d 862:, 850:) 847:1 841:n 838:( 833:3 829:e 822:) 819:n 816:( 811:3 807:e 803:2 797:) 794:) 791:n 788:( 783:3 779:s 772:n 769:( 764:2 761:3 744:, 732:) 729:n 726:( 721:2 717:e 710:) 707:n 704:( 699:2 695:s 691:2 685:n 682:2 669:d 665:d 659:, 646:) 642:1 639:+ 635:) 626:d 623:n 614:( 608:d 604:e 599:( 595:) 592:) 587:d 579:n 576:( 570:1 564:d 561:( 555:) 552:) 549:n 546:( 541:d 537:s 530:n 527:( 521:1 515:d 511:d 483:. 480:) 477:n 474:( 471:O 468:= 465:) 462:d 459:( 456:O 452:) 448:1 445:+ 438:i 434:d 430:n 424:( 418:n 410:d 400:1 397:= 394:i 376:) 374:d 366:d 364:/ 362:n 357:) 355:d 347:d 345:/ 343:n 337:d 332:n 327:d 319:) 317:d 313:n 309:d 300:d 295:) 293:d 286:d 281:) 279:d 275:n 267:d 263:n 259:n 255:d 247:n 241:d 226:n 220:n 207:x 203:x 199:x 187:d 170:⌋ 167:d 163:i 161:( 159:⌊ 152:i 146:i 140:d 134:d 120:d 114:n 104:d 86:d 76:d 58:d 48:d 29:d 20:d

Index

priority queue
data structure
binary heap
Donald B. Johnson
Dijkstra's algorithm
memory cache
in-place data structure
array
breadth first traversal order
zero-based numbering
heap property
graph
Dijkstra's algorithm
shortest paths
Prim's algorithm
minimum spanning trees
Fibonacci heap
cache memory
cache misses
virtual memory
page faults




Johnson, D. B.
doi
10.1016/0020-0190(75)90001-0

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.