Seeking for the Best Priority Queue: Lessons Learnt

Total Page:16

File Type:pdf, Size:1020Kb

Seeking for the Best Priority Queue: Lessons Learnt Updated 20 October, 2013 Seeking for the best priority queue: Lessons learnt Jyrki Katajainen1; 2 Stefan Edelkamp3, Amr Elmasry4, Claus Jensen5 1 University of Copenhagen 4 Alexandria University 2 Jyrki Katajainen and Company 5 The Royal Library 3 University of Bremen These slides are available from my research information system (see http://www.diku.dk/~jyrki/ under Presentations). c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (1) Categorization of priority queues insert minimum input: locator input: none output: none output: locator Elementary delete extract-min minimum input: locator p minimum() insert output: none delete(p) extract-min Addressable delete decrease decrease input: locator, value Mergeable output: none union union input: two priority queues output: one priority queue c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (2) Structure of this talk: Research question What is the "best" priority queue? I: Elementary II: Addressable III: Mergeable c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (3) Binary heaps 0 minimum() 8 return a[0] 12 10 26 insert(x) 3 4 5 6 a[N] = x 75 46 7512 siftup(N) 7 N += 1 80 extract-min() N = 8 min = a[0] N −= 1 a 8 10 26 75 12 46 75 80 a[0] = a[N] 02341 675 siftdown(0) left-child(i) return min return 2i + 1 right-child(i) Elementary: array-based return 2i + 2 Addressable: pointer-based parent(i) Mergeable: forest of heaps return b(i − 1)=2c c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (4) Market analysis Efficiency binary binomial Fibonacci run-relaxed heap queue heap heap Operation [Wil64] [Vui78] [FT87] [DGST88] worst case worst case amortized worst case minimum Θ(1) Θ(1) Θ(1) Θ(1) insert Θ(lg N) Θ(1) Θ(1) Θ(1) decrease Θ(lg N) Θ(lg N) Θ(1) Θ(1) delete Θ(lg N) Θ(lg N) Θ(lg N) Θ(lg N) union Θ(lg M×lg N) Θ(minflg M; lg Ng) Θ(1) Θ(minflg M; lg Ng) Here M and N denote the number of elements in the priority queues just prior to the operation. c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (5) I What is the best solution when handling a request sequence consisting of N insert and N extract-min operations? Best: Comparison complexity / running time In-place: O(1) extra words c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (6) # element comparisons Data structure insert extract-min binary heaps [Wil64] lg N + O(1) 2 lg N + O(1) heaps on heaps [GM86] lg lg N ± O(1)a) lg N + log∗ N ± O(1)b) optimal in-place heaps [EEK13] O(1) lg N + O(1) lower bounds Ω(1) lg N − O(1) minimum: O(1) worst-case time a) Binary search on the siftup path (also in [Car87]) b) lg N − lg lg N levels down along the siftdown path, siftup in a binary- search manner, or recur further down c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (7) Optimal in-place heaps are galactic; only a masochist would implement them Ideas are interesting though . Binary-heap lower bounds|assumptions 1. You should not help others 2. You should keep your house clean after each visit c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (8) What is the importance of other complexity measures? 1. # element moves 2. # instructions 3. # branch mispredictions 4. # cache misses c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (9) Theory # element moves # pure-C instructions Source insert extract-min Source insert extract-min [Wil64] ∼lg N ∼lg N [Wil64] ∼9 lg N ∼12 lg N 1 1 [BKS00] ∼5 lg N ∼9 lg N [LL96] ∼ lg N ∼ lg N 2 2 # branch mispredictions # cache misses Source insert extract-min Source insert extract-min 1 [Wil64] ∼lg N ∼lg N [Wil64] O(1) ∼ lg N M M 2 1 2 [WT89] ∼ lg N a) ∼ lg N a) [EK12] O(1) O(1) B M B M < i f ( less (a [ j ], a [ j + 1]) ) f a) < j += 1; amortized < g M: # elements in the cache −−− > j += less (a [ j ], a [ j + 1]) ; B: # elements in a cache line c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (10) Experimental environment for sanity checks Processor Intel R CoreTM i5-2520M CPU @ 2.50GHz × 4 Memory system 8-way-associative L1 cache: 32 KB 12-way-associative L3 cache: 3 MB cache lines: 64 B main memory: 3.8 GB Operating system Ubuntu 13.04 (Linux kernel 3.5.0- 37-generic) Compiler g++ compiler (gcc version 4.7.3) with optimization -O3 Profiler valgrind simulators (version 3.8.1) c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (11) Practice: Key performance indicators # element comparisons # element moves Source 210 215 220 225 Source 210 215 220 225 [Wil64] 1.73 1.82 1.87 1.89 [Wil64] 1.96 1.64 1.48 1.39 [Car87] 1.49 1.37 1.37 1.3 [LL96] 1.41 1.11 0.95 0.86 # instructions # branch mispredictions Source 210 215 220 225 Source 210 215 220 225 [Wil64] 15.1 14.9 14.8 14.7 [Wil64] 0.59 0.56 0.54 0.53 [BKS00] 15.5 14.8 14.5 14.3 [EK12] 0.20 0.14 0.10 0.08 Request: N×insert+N×extract-min # L1 cache misses Repetitions: r = 226=N 10 15 20 25 Source 2 2 2 2 Input: Random int's [Wil64] 1.00 13.1 19.1 19.7 Reported: Grand total divided by [WT89] 1.06 6.83 4.26 3.63 N n N o r × N lg N or r × B lg max 2; M c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (12) Practice: CPU times Source n N 210 215 220 225 std library [g++] 6.41 6.09 6.96 12.6 original [Wil64] 5.59 5.45 6.47 12.2 comparison opt. [Car87] 9.69 8.34 9.02 14.5 instruction opt. [BKS00] 5.44 5.41 6.31 11.8 misprediction opt. [EK12] 3.92 4.16 7.2 25.8 bottom-up [Weg93] 6.77 6.63 7.34 13.1 4-ary [LL96] 5.47 5.49 6.3 10.4 external [WT89] 5.23 5.27 5.69 6.04 Request: N × insert + N × extract-min Repetitions: r = 226=N; each for a different array Input: Random permutation of f0; 1;:::;N − 1g; type int Reported: Running time divided by r × N lg N [ns] c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (13) II What is the best solution when handling a request sequence consisting of N insert, N extract-min, and M decrease operations? Best: Comparison complexity / running time c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (14) Theory Rank-relaxed weak heaps are better than Fibonacci heaps! [EEK12] Data structure # element comparisons Fibonacci heap 2M + 2:89N lg N Rank-relaxed weak heap 2M + 1:5N lg N But they are not simpler! Data structure Lines of code Binary heap 205 Fibonacci heap 296 Rank-relaxed weak heap 883 c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (15) Does a factor of two matter? T vs. 2T c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (16) Parameterized design weak heap element type int, double, ... comparator type std::less, std::greater, ... node type weak-heap node, combined weak-heap node & graph node, ... modifier type relaxed heap modifier, ... level-registry type leaf registry, ... mark-registry type naive mark registry, eager mark registry, lazy mark registry, ... • comparators shared • nodes shared • transformations shared • level registries shared • mark registries shared a factor of two less code c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (17) Our play with Dijkstra's algorithm With your search engine, you will • Which algorithm find many experimental studies • Which graph representation on Dijkstra's algorithm. Be crit- • Which priority queue ical when you read the results. • Which tuning level priority queue minimum source scanned labelled unlabelled a factor of two speed-up c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (18) Policy-based benchmarking Distance comparisons [M = 2N lg N] 1.4 ) N 1.2 lg N 1 + M 0.8 0.6 rank−relaxed weak queue pairing heap 0.4 weak queue Fibonacci heap rank−relaxed weak heap 0.2 # comparisons / ( binary heap weak heap 0 104 105 106 N [logarithmic scale] c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (19) Policy-based benchmarking Running times [M = 2N lg N] 90 rank−relaxed weak heap 80 rank−relaxed weak queue Fibonacci heap 70 weak heap ) [ns] weak queue N 60 binary heap lg 50 pairing heap N + 40 M 30 20 time / ( 10 0 104 105 106 N [logarithmic scale] c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (20) Graph representation CPH STL LEDA • adjacency arrays • adjacency lists • simple • nice interface • static • fully dynamic • 16M + 16N + O(1) bytes for • parameterized a graph with M edges and N • 52M + 60N + O(1) bytes vertices [LEDA Book, x 6.14] tentative distance state edge pointer vertex edge ... end points weight a factor of two speed-up c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (21) Avoiding indirection Combine the graph vertex and the priority-queue node [Knu94] ! improves cache behaviour a factor of two speed-up c Performance Engineering Laboratory Seminar 13391: Schloss Dagstuhl, Germany (22) Tuning Running time / N [µs] # element comparisons / N Structure CPH STL LEDA 6.2 Structure CPH STL LEDA 6.2 Fibonacci Fibonacci Fibonacci Fibonacci Operation heap heap Operation heap heap insert insert N: 10 000 0.10 0.18 N: 10 000 0 1 N: 100 000 0.09 0.15 N: 100 000 0 1 N: 1 000 000 0.09 0.15 N: 1 000 000 0 1 decrease decrease N: 10 000 0.03 0.06 N: 10 000 0 2 N: 100 000 0.05 0.22 N: 100 000 0 2 N: 1 000 000 0.06 0.31 N: 1 000 000 0 2 extract-min extract-min N: 10 000 0.7 1.2 N: 10 000 16.2 29.9 N: 100 000 1.4 2.7 N: 100 000 21.2 38.3 N: 1 000 000 2.8 4.5 N: 1 000 000 26.2
Recommended publications
  • Space-Efficient Data Structures, Streams, and Algorithms
    Andrej Brodnik Alejandro López-Ortiz Venkatesh Raman Alfredo Viola (Eds.) Festschrift Space-Efficient Data Structures, Streams, LNCS 8066 and Algorithms Papers in Honor of J. Ian Munro on the Occasion of His 66th Birthday 123 Lecture Notes in Computer Science 8066 Commenced Publication in 1973 Founding and Former Series Editors: Gerhard Goos, Juris Hartmanis, and Jan van Leeuwen Editorial Board David Hutchison Lancaster University, UK Takeo Kanade Carnegie Mellon University, Pittsburgh, PA, USA Josef Kittler University of Surrey, Guildford, UK Jon M. Kleinberg Cornell University, Ithaca, NY, USA Alfred Kobsa University of California, Irvine, CA, USA Friedemann Mattern ETH Zurich, Switzerland John C. Mitchell Stanford University, CA, USA Moni Naor Weizmann Institute of Science, Rehovot, Israel Oscar Nierstrasz University of Bern, Switzerland C. Pandu Rangan Indian Institute of Technology, Madras, India Bernhard Steffen TU Dortmund University, Germany Madhu Sudan Microsoft Research, Cambridge, MA, USA Demetri Terzopoulos University of California, Los Angeles, CA, USA Doug Tygar University of California, Berkeley, CA, USA Gerhard Weikum Max Planck Institute for Informatics, Saarbruecken, Germany Andrej Brodnik Alejandro López-Ortiz Venkatesh Raman Alfredo Viola (Eds.) Space-Efficient Data Structures, Streams, and Algorithms Papers in Honor of J. Ian Munro on the Occasion of His 66th Birthday 13 Volume Editors Andrej Brodnik University of Ljubljana, Faculty of Computer and Information Science Ljubljana, Slovenia and University of Primorska,
    [Show full text]
  • A Complete Bibliography of Publications in Nordisk Tidskrift for Informationsbehandling, BIT, and BIT Numerical Mathematics
    A Complete Bibliography of Publications in Nordisk Tidskrift for Informationsbehandling, BIT,andBIT Numerical Mathematics Nelson H. F. Beebe University of Utah Department of Mathematics, 110 LCB 155 S 1400 E RM 233 Salt Lake City, UT 84112-0090 USA Tel: +1 801 581 5254 FAX: +1 801 581 4148 E-mail: [email protected], [email protected], [email protected] (Internet) WWW URL: http://www.math.utah.edu/~beebe/ 09 June 2021 Version 3.54 Title word cross-reference [3105, 328, 469, 655, 896, 524, 873, 455, 779, 946, 2944, 297, 1752, 670, 2582, 1409, 1987, 915, 808, 761, 916, 2071, 2198, 1449, 780, 959, 1105, 1021, 497, 2589]. A(α) #24873 [1089]. [896, 2594, 333]. A∗ [2013]. A∗Ax = b [2369]. n A [1640, 566, 947, 1580, 1460]. A = a2 +1 − 0 n (3) [2450]. (A λB) [1414]. 0=1 [1242]. 1 [334]. α [824, 1580]. AN [1622]. A(#) [3439]. − 12 [3037, 2711]. 1 2 [1097]. 1:0 [3043]. 10 AX − XB = C [2195, 2006]. [838]. 11 [1311]. 2 AXD − BXC = E [1101]. B [2144, 1953, 2291, 2162, 3047, 886, 2551, 957, [2187, 1575, 1267, 1409, 1489, 1991, 1191, 2007, 2552, 1832, 949, 3024, 3219, 2194]. 2; 3 979, 1819, 1597, 1823, 1773]. β [824]. BN n − p − − [1490]. 2 1 [320]. 2 1 [100]. 2m 4 [1181]. BS [1773]. BSI [1446]. C0 [2906]. C1 [1105]. 3 [2119, 1953, 2531, 1351, 2551, 1292, [3202]. C2 [3108, 2422, 3000, 2036]. χ2 1793, 949, 1356, 2711, 2227, 570]. [30, 31]. Cln(θ); (n ≥ 2) [2929]. cos [228]. D 3; 000; 000; 000 [575, 637].
    [Show full text]
  • Fundamental Data Structures Contents
    Fundamental Data Structures Contents 1 Introduction 1 1.1 Abstract data type ........................................... 1 1.1.1 Examples ........................................... 1 1.1.2 Introduction .......................................... 2 1.1.3 Defining an abstract data type ................................. 2 1.1.4 Advantages of abstract data typing .............................. 4 1.1.5 Typical operations ...................................... 4 1.1.6 Examples ........................................... 5 1.1.7 Implementation ........................................ 5 1.1.8 See also ............................................ 6 1.1.9 Notes ............................................. 6 1.1.10 References .......................................... 6 1.1.11 Further ............................................ 7 1.1.12 External links ......................................... 7 1.2 Data structure ............................................. 7 1.2.1 Overview ........................................... 7 1.2.2 Examples ........................................... 7 1.2.3 Language support ....................................... 8 1.2.4 See also ............................................ 8 1.2.5 References .......................................... 8 1.2.6 Further reading ........................................ 8 1.2.7 External links ......................................... 9 1.3 Analysis of algorithms ......................................... 9 1.3.1 Cost models ......................................... 9 1.3.2 Run-time analysis
    [Show full text]
  • *Dictionary Data Structures 3
    CHAPTER *Dictionary Data Structures 3 The exploration efficiency of algorithms like A* is often measured with respect to the number of expanded/generated problem graph nodes, but the actual runtimes depend crucially on how the Open and Closed lists are implemented. In this chapter we look closer at efficient data structures to represent these sets. For the Open list, different options for implementing a priority queue data structure are consid- ered. We distinguish between integer and general edge costs, and introduce bucket and advanced heap implementations. For efficient duplicate detection and removal we also look at hash dictionaries. We devise a variety of hash functions that can be computed efficiently and that minimize the number of collisions by approximating uniformly distributed addresses, even if the set of chosen keys is not (which is almost always the case). Next we explore memory-saving dictionaries, the space requirements of which come close to the information-theoretic lower bound and provide a treatment of approximate dictionaries. Subset dictionaries address the problem of finding partial state vectors in a set. Searching the set is referred to as the Subset Query or the Containment Query problem. The two problems are equivalent to the Partial Match retrieval problem for retrieving a partially specified input query word from a file of k-letter words with k being fixed. A simple example is the search for a word in a crossword puzzle. In a state space search, subset dictionaries are important to store partial state vectors like dead-end patterns in Sokoban that generalize pruning rules (see Ch.
    [Show full text]
  • An English-Persian Dictionary of Algorithms and Data Structures
    An EnglishPersian Dictionary of Algorithms and Data Structures a a zarrabibasuacir ghodsisharifedu algorithm B A all pairs shortest path absolute p erformance guarantee b alphab et abstract data typ e alternating path accepting state alternating Turing machine d Ackermans function alternation d Ackermanns function amortized cost acyclic digraph amortized worst case acyclic directed graph ancestor d acyclic graph and adaptive heap sort ANSI b adaptivekdtree antichain adaptive sort antisymmetric addresscalculation sort approximation algorithm adjacencylist representation arc adjacencymatrix representation array array index adjacency list array merging adjacency matrix articulation p oint d adjacent articulation vertex d b admissible vertex assignmentproblem adversary asso ciation list algorithm asso ciative binary function asso ciative array binary GCD algorithm asymptotic b ound binary insertion sort asymptotic lower b ound binary priority queue asymptotic space complexity binary relation binary search asymptotic time complexity binary trie asymptotic upp er b ound c bingo sort asymptotically equal to bipartite graph asymptotically tightbound bipartite matching
    [Show full text]
  • Lazy Search Trees
    Lazy Search Trees Bryce Sandlund1 and Sebastian Wild2 1David R. Cheriton School of Computer Science, University of Waterloo 2Department of Computer Science, University of Liverpool October 20, 2020 Abstract We introduce the lazy search tree data structure. The lazy search tree is a comparison- based data structure on the pointer machine that supports order-based operations such as rank, select, membership, predecessor, successor, minimum, and maximum while providing dynamic operations insert, delete, change-key, split, and merge. We analyze the performance of our data structure based on a partition of current elements into a set of gaps {∆i} based on rank. A query falls into a particular gap and splits the gap into two new gaps at a rank r associated with the query operation. If we define B = ∑i S∆iS log2(n~S∆iS), our performance over a sequence of n insertions and q distinct queries is O(B + min(n log log n; n log q)). We show B is a lower bound. Effectively, we reduce the insertion time of binary search trees from Θ(log n) to O(min(log(n~S∆iS) + log log S∆iS; log q)), where ∆i is the gap in which the inserted element falls. Over a sequence of n insertions and q queries, a time bound of O(n log q + q log n) holds; better bounds are possible when queries are non-uniformly distributed. As an extreme case of non-uniformity, if all queries are for the minimum element, the lazy search tree performs as a priority queue with O(log log n) time insert and decrease-key operations.
    [Show full text]
  • The Algorithms and Data Structures Course Multicomponent Complexity and Interdisciplinary Connections
    Technium Vol. 2, Issue 5 pp.161-171 (2020) ISSN: 2668-778X www.techniumscience.com The Algorithms and Data Structures course multicomponent complexity and interdisciplinary connections Gregory Korotenko Dnipro University of Technology, Ukraine [email protected] Leonid Korotenko Dnipro University of Technology, Ukraine [email protected] Abstract. The experience of modern education shows that the trajectory of preparing students is extremely important for their further adaptation in the structure of widespread digitalization, digital transformations and the accumulation of experience with digital platforms of business and production. At the same time, there continue to be reports of a constant (catastrophic) lack of personnel in this area. The basis of the competencies of specialists in the field of computing is the ability to solve algorithmic problems that they have not been encountered before. Therefore, this paper proposes to consider the features of teaching the course Algorithms and Data Structures and possible ways to reduce the level of complexity in its study. Keywords. learning, algorithms, data structures, data processing, programming, mathematics, interdisciplinarity. 1. Introduction The analysis of electronic resources and literary sources allows for the conclusion that the Algorithms and Data Structures course is one of the cornerstones for the study programs related to computing. Moreover, this can be considered not only from the point of view of entering the profession, but also from the point of view of preparation for an interview in hiring as a programmer, including at a large IT organization (Google, Microsoft, Apple, Amazon, etc.) or for a promising startup [1]. As a rule, this course is characterized by an abundance of complex data structures and various algorithms for their processing.
    [Show full text]
  • Weak Heaps and Friends Recent Developments Edelkamp, Stefan; Elmasry, Amr; Katajainen, Jyrki; Weiß, Armin
    Weak heaps and friends recent developments Edelkamp, Stefan; Elmasry, Amr; Katajainen, Jyrki; Weiß, Armin Published in: Combinatorial Algorithms DOI: 10.1007/978-3-642-45278-9_1 Publication date: 2013 Document version Peer reviewed version Document license: Other Citation for published version (APA): Edelkamp, S., Elmasry, A., Katajainen, J., & Weiß, A. (2013). Weak heaps and friends: recent developments. In T. Lecroq, & L. Mouchard (Eds.), Combinatorial Algorithms: 24th International Workshop, IWOCA 2013, Rouen, France, July 10-12, 2013, Revised Selected Papers (pp. 1-6). Springer. Lecture notes in computer science Vol. 8288 https://doi.org/10.1007/978-3-642-45278-9_1 Download date: 30. sep.. 2021 Weak Heaps and Friends: Recent Developments Stefan Edelkamp1, Amr Elmasry2, Jyrki Katajainen3, and Armin Weiß4 1 Faculty 3|Mathematics and Computer Science, University of Bremen PO Box 330 440, 28334 Bremen, Germany 2 Department of Computer Engineering and Systems, Alexandria University Alexandria 21544, Egypt 3 Department of Computer Science, University of Copenhagen Universitetsparken 5, 2100 Copenhagen East, Denmark 4 Institute for Formal Methods in Computer Science, University of Stuttgart Universit¨atstraße 38, 70569 Stuttgart, Germany Abstract. A weak heap is a variant of a binary heap where, for each node, the heap ordering is enforced only for one of its two children. In 1993, Dutton showed that this data structure yields a simple worst- case-efficient sorting algorithm. In this paper we review the refinements proposed to the basic data structure that improve the efficiency even further. Ultimately, minimum and insert operations are supported in O(1) worst-case time and extract-min operation in O(lg n) worst-case time involving at most lg n + O(1) element comparisons.
    [Show full text]
  • Lazy Search Trees §1 Introduction ⋅ 1
    Lazy Search Trees Bryce Sandlund1 and Sebastian Wild2 1David R. Cheriton School of Computer Science, University of Waterloo 2Department of Computer Science, University of Liverpool October 20, 2020 Abstract We introduce the lazy search tree data structure. The lazy search tree is a comparison- based data structure on the pointer machine that supports order-based operations such as rank, select, membership, predecessor, successor, minimum, and maximum while providing dynamic operations insert, delete, change-key, split, and merge. We analyze the performance of our data structure based on a partition of current elements into a set of gaps {∆i} based on rank. A query falls into a particular gap and splits the gap into two new gaps at a rank r associated with the query operation. If we define B = ∑i S∆iS log2(n~S∆iS), our performance over a sequence of n insertions and q distinct queries is O(B + min(n log log n,n log q)). We show B is a lower bound. Effectively, we reduce the insertion time of binary search trees from Θ(log n) to O(min(log(n~S∆iS) + log log S∆iS, log q)), where ∆i is the gap in which the inserted element falls. Over a sequence of n insertions and q queries, a time bound of O(n log q + q log n) holds; better bounds are possible when queries are non-uniformly distributed. As an extreme case of non-uniformity, if all queries are for the minimum element, the lazy search tree performs as a priority queue with O(log log n) time insert and decrease-key operations.
    [Show full text]
  • Weak Updates and Separation Logic
    Weak updates and separation logic Gang Tan1, Zhong Shao2, Xinyu Feng3, and Hongxu Cai4 1Lehigh University, 2Yale University 3Toyota Technological Institute at Chicago, 4Google Inc. Abstract. Separation Logic (SL) provides a simple but powerful technique for reasoning about imperative programs that use shared data structures. Unfortu- nately, SL supports only “strong updates”, in which mutation to a heap location is safe only if a unique reference is owned. This limits the applicability of SL when reasoning about the interaction between many high-level languages (e.g., ML, Java, C#) and low-level ones since these high-level languages do not support strong updates. Instead, they adopt the discipline of “weak updates”, in which there is a global “heap type” to enforce the invariant of type-preserving heap up- dates. We present SLw, a logic that extends SL with reference types and elegantly reasons about the interaction between strong and weak updates. We also describe a semantic framework for reference types; this framework is used to prove the soundness of SLw. 1 Introduction Reasoning about mutable, aliased heap data structures is essential for proving properties or checking safety of imperative programs. Two distinct approaches perform such kind of reasoning: Separation Logic, and a type-based approach employed by many high- level programming languages. Extending Hoare Logic, the seminal work of Separation Logic (SL [10, 13]) is a powerful framework for proving properties of low-level imperative programs. Through its separating conjunction operator and frame rule, SL supports local reasoning about heap updates, storage allocation, and explicit storage deallocation. SL supports “strong updates”: as long as a unique reference to a heap cell is owned, the heap-update rule of SL allows the cell to be updated with any value: {(e 7→ −) ∗ p}[e] := e′{(e 7→ e′) ∗ p} (1) In the above heap-update rule, there is no restriction on the new value e′.
    [Show full text]
  • Data Structures
    KARNATAKA STATE OPEN UNIVERSITY DATA STRUCTURES BCA I SEMESTER SUBJECT CODE: BCA 04 SUBJECT TITLE: DATA STRUCTURES 1 STRUCTURE OF THE COURSE CONTENT BLOCK 1 PROBLEM SOLVING Unit 1: Top-down Design – Implementation Unit 2: Verification – Efficiency Unit 3: Analysis Unit 4: Sample Algorithm BLOCK 2 LISTS, STACKS AND QUEUES Unit 1: Abstract Data Type (ADT) Unit 2: List ADT Unit 3: Stack ADT Unit 4: Queue ADT BLOCK 3 TREES Unit 1: Binary Trees Unit 2: AVL Trees Unit 3: Tree Traversals and Hashing Unit 4: Simple implementations of Tree BLOCK 4 SORTING Unit 1: Insertion Sort Unit 2: Shell sort and Heap sort Unit 3: Merge sort and Quick sort Unit 4: External Sort BLOCK 5 GRAPHS Unit 1: Topological Sort Unit 2: Path Algorithms Unit 3: Prim‘s Algorithm Unit 4: Undirected Graphs – Bi-connectivity Books: 1. R. G. Dromey, ―How to Solve it by Computer‖ (Chaps 1-2), Prentice-Hall of India, 2002. 2. M. A. Weiss, ―Data Structures and Algorithm Analysis in C‖, 2nd ed, Pearson Education Asia, 2002. 3. Y. Langsam, M. J. Augenstein and A. M. Tenenbaum, ―Data Structures using C‖, Pearson Education Asia, 2004 4. Richard F. Gilberg, Behrouz A. Forouzan, ―Data Structures – A Pseudocode Approach with C‖, Thomson Brooks / COLE, 1998. 5. Aho, J. E. Hopcroft and J. D. Ullman, ―Data Structures and Algorithms‖, Pearson education Asia, 1983. 2 BLOCK I BLOCK I PROBLEM SOLVING Computer problem-solving can be summed up in one word – it is demanding! It is an intricate process requiring much thought, careful planning, logical precision, persistence, and attention to detail.
    [Show full text]
  • A Survey on Priority Queues
    A Survey on Priority Queues Gerth Stølting Brodal MADALGO?, Department of Computer Science, Aarhus University, [email protected] Abstract. Back in 1964 Williams introduced the binary heap as a basic priority queue data structure supporting the operations Insert and Ex- tractMin in logarithmic time. Since then numerous papers have been published on priority queues. This paper tries to list some of the direc- tions research on priority queues has taken the last 50 years. 1 Introduction In 1964 Williams introduced \Algorithm 232" [125]|a data structure later known as binary heaps. This data structure essentially appears in all introduc- tory textbooks on Algorithms and Data Structures because of its simplicity and simultaneously being a powerful data structure. A tremendous amount of research has been done within the design and anal- ysis of priority queues over the last 50 years, building on ideas originating back to the initial work of Williams and Floyd in the early 1960s. In this paper I try to list some of this work, but it is evident by the amount of research done that the list is in no respect complete. Many papers address several aspects of priority queues. In the following only a few of these aspects are highlighted. 2 The beginning: Binary heaps Williams' binary heap is a data structure to store a dynamic set of elements from an ordered set supporting the insertion of an element (Insert) and the deletion of the minimum element (ExtractMin) in O(lg n) time, where n is the number of elements in the priority queue1. Williams' data structure was inspired by Floyd's 1962 paper on sorting using a tournament tree [65], but compared to Floyd's earlier work a binary heap is implicit, i.e.
    [Show full text]