Linear Data Structure Using Linked Organization (Linked List)

Total Page:16

File Type:pdf, Size:1020Kb

Linear Data Structure Using Linked Organization (Linked List) Linear data structure using Linked organization (Linked List) Unit VI: Linear data structures using linked organization • Concept of linked organization, singly linked list, doubly linked list, circular linked list. • Linked list as an ADT. • Representation and manipulations of polynomials using linked lists. • Comparison of a sequential and linked memory organization. • Concept of Generalized Linked List. • Representation polynomial using GLL. List Overview • What is a list and its ADT • Array as an list • Linked List • Why linked list ? – Limitations of array • Linked lists – Abstract data type (ADT) – Types of linked list • Basic operations of linked list and their implementations :: – Insert, fnd, delete, print, etc. • Variations of linked lists – Circular linked lists – Doubly linked lists The List ADT • A sequence of zero or more elements A1, A2, A3, … AN • N: length of the list • A1: frst element • AN: last element • Ai: position i • If N=0, then empty list • Linearly ordered – Ai precedes Ai+1 – Ai follows Ai-1 List ADT :: Operations • printList: print the list • makeEmpty: create an empty list • fnd: locate the position of an object in a list – list: 34,12, 52, 16, 12 – fnd(52) 3 • insert: insert an object to a list – insert(x,3) 34, 12, 52, x, 16, 12 • remove: delete an element from the list – remove(52) 34, 12, x, 16, 12 • Find Kth: retrieve the element at a certain position Implementation of an ADT • Two standard implementations for the list ADT – Array-based – Linked list Overall operations on the list: Insertion • Create – Insert at frst • Insertion – Insert at last • Deletion – Insert at particular position • Searching • Display • Sorting Deletion • Reverse – Deletion at Front • Split – Deletion at last – • Merge Deletion a particular element Array Implementation • Elements are stored in contiguous array positions Array Implementation... • Requires an estimate of the maximum size of the list • printList and fnd: linear • Find Kth: constant • insert and delete: slow – e.g. insert at position 0 (making a new element) • requires frst pushing the entire array down one spot to make room – e.g. delete at position 0 • requires shifting all the elements in the list up one – On average, half of the lists needs to be moved for either operation Why Linked list ? • Limitations of array – Dynamic vs. static data structure • unpredictable storage requirement, wastage of memory – Operations on array vs. linked list • Extensive manipulation of data make it slow • Hard to implement nonlinear data structure using array. Linked Lists A B C Head • Linked list is ordered list type. node • A linked list is a series of connected nodes A • Each node contains at least – A piece of data (any type) data pointer – Pointer /link to the next node in the list • Head: pointer to the frst node • The last node links points to NULL Pointer Implementation (Linked List) • Ensure that the list is not stored contiguously – use a linked list – a series of structures that are not necessarily adjacent in memory . Each node contains the element and a pointer to a structure containing its successor ✔the last cell’s next link points to NULL . Compared to the array implementation, the pointer implementation uses only as much space as is needed for the elements currently on the list but requires space for the pointers in each cell A Simple Linked List C implementation • Declare Node structure for the nodes – data: int/ char/ foating -type – next: a pointer to the next node in the list typedef strcuture Node { int data; // data Node* next; // pointer to next }; Node 10 data next Pointer-Based Linked Lists Figure :: A head pointer to a list Terminology • linked list a list consisting of items in which each item knows the location of the next item. • Node an item in a linked list. • Each node contains a piece of list data and the location of the next node (item). • link (of a node) the location of the next node. • Head node frst node in a linked list • Head pointer points to the head node Basic Structure Pseudo code • • Problems: Find last node in list • Create an empty list. P=head; head = NULL; While (p->next !=NULL) p= p->next; • Determine if a list is empty Find an item (x) in a list p = head while( p->next != NULL && if (head == NULL) p->info != x) { // list is empty access p->info p = p->link } Create void main() { Node *p,* head =NULL; int i; /* // multiple nodes printf(“\n\t How many elements” ); clrscr(); scanf( “%d”,&n); // One node creation p=head; for(i=0;i<n;i++) head =(Node *) { malloc( sizeof(Node)); p->next=(Node *) malloc (sizeof(Node)); scanf(“%d”,head->data); p=p->next; scanf(“%d”,p->data); head->next=NULL; } printf(“%d”,head->data); getch(); } Preliminaries Head Head Head Figure a) A linked list of integers; b) insertion; c) deletion Displaying the Contents of a Linked List Head Head The effect of the assignment cur = cur->next Displaying the Contents of a Linked List Void display(Node *HeadD) Recursive { void printR(Node *Head while(HeadD!=NULL) { { if(Head!=NULL) print HeadD; { HeadD = HeadD→next; printf(“%d”, head→ data) } printR(head->next) } } } Insertion • Insertin at start Insertion at MIDDLE 1. t next = start 1. Enter info of the node after which 2. start = t new node to be inserted Return start 2. Read x • Insertion at LAST 3. p = start 1. p = start 4. Repeat step 5 until p info < > x 2. Repeat step 3 until p next 5. p = p next NULL 6. t next = p next 3. p = p next 4. 5. p next = 7. p next = t getnode() 8. Return 6. Return start Void insert_E(Node *Headt) { Node *temp = allocate address(); while(Headt->next!=NULL) { Headt = Headt->next; } Headt ->next = temp; } Node *insert_S(Node *Headt) { Node *temp = allocate address(); temp->next =Headt; Headt = temp; Return Headt; } Void insert_Betw(Node *Head) { int t; Node *Headt=Head; Node *temp = allocate address(); printf(“Enter data after which we want to insert a Node”); scanf(“%d”, &t); If (Headt == NULL) Headt = temp; return Headt; while(Headt ->data !=t) { Headt = Headt->next; } Temp->next = headt->next; Headt->next = temp; return Head; } Deletion • Delete frst node • Delete at pos 1. x = start 1. Enter th e info of node to be 2. start = start next deleted 3. free(x) 2. Read n 3. p = start • Delete last node 4. c = start 1. p = start 5. while (c info < > NULL) c = start 2. while (c next < > NULL) { p = c p = c c = c next } c = c next 6. p next = c next 3. p next = c next 7. free ( c ) 4. free ( c) 8. Return start 5. return start Deleting a Specifed Node from a Linked List Figure :: Deleting a node from a linked list Figure :: Deleting the first node Deleting a Specifed Node from a Linked List • Deleting an interior node prev->next=cur->next; • Deleting the frst node head=head->next; • Return deleted node to system cur->next = NULL; delete cur; cur=NULL; Node *reverse(Node * start) { Node *current ,*temp, *result; temp=NULL; result=NULL; current =start; Reverse The if(start->next==NULL) return start; Singly Link List while(current!=NULL) { temp = current->next; current->next = result; result= current; current = temp; } start = result; return start; } Display List in reverse order void printR(Node *head) { if(head != NULL) { printR(head->next); printf("%d ",head->data); } } Assignment 9 Create a singly linked list with options: Insert (at front, at end, in the middle), Delete (at front, at end, in the middle), Display, Display Reverse, Revert the SLL without using additional data structure. Bubble sort to sort a linked list n=length(head) for(i = 1; i < n; i++) { p1 = head; p2 = head->next; p3 = p2->next; for(j = 1; j <= (n - i); j++) { if(p2->value < p3->value) { p2->next = p3->next; p3->next = p2; p1->next = p3; p1 = p3; p3 = p2->next; } else { p1 = p2; p2 = p3; p3 = p3->next; } } } Sorting Node * sortlist(N ode *start) { Node *index 1, Index 2; int temp; index1= start; for(; new1->next != NULL; index1= index1->next) { for(index 2 = index1->next; index2 != NULL; index2= index2->next) { if(index1->data > index2->data) { temp = index1->data; index1->data = index2->data; index1->data = temp; } } }} Merging two linked list Node *Merge (Node * head1, Node *head2 , Node * head3) Node * h1, *h2, h3 { // create third list frst node head3= (Node *) malloc(sizeof (Node)) head3- >info =h1->info head1=h1->next head3->next =NULL h3=head3 } Merging continued … • Case 1 – copy all the remaining node of list one to list 3 • Case 2 – Copy the all the remaining element of list two to list three • Last – Return header of list 3 Variations of Linked Lists • Circular linked lists • – The last node points to the frst node of the list A B C Head How do we know when we have fnished traversing the list? (Tip: check if the pointer of the current node is equal to the head.) Variations of Linked Lists • Doubly linked lists – Each node points to not only successor but the predecessor – There are two NULL: at the frst and last nodes in the list – Advantage: given a node, it is easy to visit its predecessor. Convenient to traverse lists – backwards A B C Head Array versus Linked Lists • Linked lists are more complex to code and manage than arrays, but they have some distinct advantages. – Dynamic: a linked list can easily grow and shrink in size. • We don’t need to know how many nodes will be in the list. They are created in memory as needed. • In contrast, the size of a C++ array is fxed at compilation time. – Easy and fast insertions and deletions • To insert or delete an element in an array, we need to copy to temporary variables to make room for new elements or close the gap caused by deleted elements.
Recommended publications
  • Programmer's Guide
    Programmer’s Guide Release 2.2.0 January 16, 2016 CONTENTS 1 Introduction 1 1.1 Documentation Roadmap...............................1 1.2 Related Publications..................................2 2 Overview 3 2.1 Development Environment..............................3 2.2 Environment Abstraction Layer............................4 2.3 Core Components...................................4 2.4 Ethernet* Poll Mode Driver Architecture.......................6 2.5 Packet Forwarding Algorithm Support........................6 2.6 librte_net........................................6 3 Environment Abstraction Layer7 3.1 EAL in a Linux-userland Execution Environment..................7 3.2 Memory Segments and Memory Zones (memzone)................ 11 3.3 Multiple pthread.................................... 12 3.4 Malloc.......................................... 14 4 Ring Library 19 4.1 References for Ring Implementation in FreeBSD*................. 20 4.2 Lockless Ring Buffer in Linux*............................ 20 4.3 Additional Features.................................. 20 4.4 Use Cases....................................... 21 4.5 Anatomy of a Ring Buffer............................... 21 4.6 References....................................... 28 5 Mempool Library 31 5.1 Cookies......................................... 31 5.2 Stats.......................................... 31 5.3 Memory Alignment Constraints............................ 31 5.4 Local Cache...................................... 32 5.5 Use Cases....................................... 33 6
    [Show full text]
  • Linux Kernel and Driver Development Training Slides
    Linux Kernel and Driver Development Training Linux Kernel and Driver Development Training © Copyright 2004-2021, Bootlin. Creative Commons BY-SA 3.0 license. Latest update: October 9, 2021. Document updates and sources: https://bootlin.com/doc/training/linux-kernel Corrections, suggestions, contributions and translations are welcome! embedded Linux and kernel engineering Send them to [email protected] - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 1/470 Rights to copy © Copyright 2004-2021, Bootlin License: Creative Commons Attribution - Share Alike 3.0 https://creativecommons.org/licenses/by-sa/3.0/legalcode You are free: I to copy, distribute, display, and perform the work I to make derivative works I to make commercial use of the work Under the following conditions: I Attribution. You must give the original author credit. I Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. I For any reuse or distribution, you must make clear to others the license terms of this work. I Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. Document sources: https://github.com/bootlin/training-materials/ - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 2/470 Hyperlinks in the document There are many hyperlinks in the document I Regular hyperlinks: https://kernel.org/ I Kernel documentation links: dev-tools/kasan I Links to kernel source files and directories: drivers/input/ include/linux/fb.h I Links to the declarations, definitions and instances of kernel symbols (functions, types, data, structures): platform_get_irq() GFP_KERNEL struct file_operations - Kernel, drivers and embedded Linux - Development, consulting, training and support - https://bootlin.com 3/470 Company at a glance I Engineering company created in 2004, named ”Free Electrons” until Feb.
    [Show full text]
  • Tricore Architecture Manual for a Detailed Discussion of Instruction Set Encoding and Semantics
    User’s Manual, v2.3, Feb. 2007 TriCore 32-bit Unified Processor Core Embedded Applications Binary Interface (EABI) Microcontrollers Edition 2007-02 Published by Infineon Technologies AG 81726 München, Germany © Infineon Technologies AG 2007. All Rights Reserved. Legal Disclaimer The information given in this document shall in no event be regarded as a guarantee of conditions or characteristics (“Beschaffenheitsgarantie”). With respect to any examples or hints given herein, any typical values stated herein and/or any information regarding the application of the device, Infineon Technologies hereby disclaims any and all warranties and liabilities of any kind, including without limitation warranties of non- infringement of intellectual property rights of any third party. Information For further information on technology, delivery terms and conditions and prices please contact your nearest Infineon Technologies Office (www.infineon.com). Warnings Due to technical requirements components may contain dangerous substances. For information on the types in question please contact your nearest Infineon Technologies Office. Infineon Technologies Components may only be used in life-support devices or systems with the express written approval of Infineon Technologies, if a failure of such components can reasonably be expected to cause the failure of that life-support device or system, or to affect the safety or effectiveness of that device or system. Life support devices or systems are intended to be implanted in the human body, or to support and/or maintain and sustain and/or protect human life. If they fail, it is reasonable to assume that the health of the user or other persons may be endangered. User’s Manual, v2.3, Feb.
    [Show full text]
  • FSS) in Oracle Cloud Infrastructure
    Everyone Loves File: File Storage Service (FSS) in Oracle Cloud Infrastructure Bradley C. Kuszmaul Matteo Frigo Justin Mazzola Paluska Alexander (Sasha) Sandler Oracle Corporation Abstract 100 MB=s of bandwidth and 3000 operations per sec- ond for every terabyte stored. Customers can mount a File Storage Service (FSS) is an elastic filesystem pro- filesystem on an arbitrary number of NFS clients. The vided as a managed NFS service in Oracle Cloud In- size of a file or filesystem is essentially unbounded, lim- frastructure. Using a pipelined Paxos implementation, ited only by the practical concerns that the NFS pro- we implemented a scalable block store that provides lin- tocol cannot cope with files bigger than 16 EiB and earizable multipage limited-size transactions. On top of that we would need to deploy close to a million hosts the block store, we built a scalable B-tree that provides to store multiple exabytes. FSS provides the ability linearizable multikey limited-size transactions. By us- to take a snapshot of a filesystem using copy-on-write ing self-validating B-tree nodes and performing all B- techniques. Creating a filesystem or snapshot is cheap, tree housekeeping operations as separate transactions, so that customers can create thousands of filesystems, each key in a B-tree transaction requires only one page each with thousands of snapshots. The system is robust in the underlying block transaction. The B-tree holds against failures since it synchronously replicates data the filesystem metadata. The filesystem provides snap- and metadata 5-ways using Paxos [44]. shots by using versioned key-value pairs.
    [Show full text]
  • Circ-Tree: a B+-Tree Variant with Circular Design for Persistent Memory
    IEEE TRANASCTIONS ON XXXXXX 1 Circ-Tree: A B+-Tree Variant with Circular Design for Persistent Memory Chundong Wang, Gunavaran Brihadiswarn, Xingbin Jiang, and Sudipta Chattopadhyay Abstract—Several B+-tree variants have been developed to exploit the performance potential of byte-addressable non-volatile memory (NVM). In this paper, we attentively investigate the properties of B+-tree and find that, a conventional B+-tree node is a linear structure in which key-value (KV) pairs are maintained from the zero offset of the node. These pairs are shifted in a unidirectional fashion for insertions and deletions. Inserting and deleting one KV pair may inflict a large amount of write amplifications due to shifting KV pairs. This badly impairs the performance of in-NVM B+-tree. In this paper, we propose a novel circular design for B+-tree. With regard to NVM’s byte-addressability, our Circ-tree design embraces tree nodes in a circular structure without a fixed base address, and bidirectionally shifts KV pairs in a node for insertions and deletions to minimize write amplifications. We have implemented a prototype for Circ-Tree and conducted extensive experiments. Experimental results show that Circ-Tree significantly outperforms two state-of-the-art in-NVM B+-tree variants, i.e., NV-tree and FAST+FAIR, by up to 1.6× and 8.6×, respectively, in terms of write performance. The end-to-end comparison by running YCSB to KV store systems built on NV-tree, FAST+FAIR, and Circ-Tree reveals that Circ-Tree yields up to 29.3% and 47.4% higher write performance, respectively, than NV-tree and FAST+FAIR.
    [Show full text]
  • 15-213 Lectures 22 and 23: Synchronization
    15-213 Lectures 22 and 23: Synchronization Carnegie Mellon Carnegie Mellon Introduction Last Time: Threads Introduction to Computer Systems Concepts 15-213/18-243, fall 2009 Synchronization with Semaphores 23 rd Lecture, Nov 19 Today: Synchronization in Greater Depth Producer Consumer Buffer Pools and Condition Variables Instructors: Message Queues Roger B. Dannenberg and Greg Ganger Message Passing 2 Carnegie Mellon Carnegie Mellon Notifying With Semaphores Producer-Consumer on a Buffer That Holds One Item producer shared consumer /* buf1.c - producer-consumer int main() { thread buffer thread on 1-element buffer */ pthread_t tid_producer; #include “csapp.h” pthread_t tid_consumer; #define NITERS 5 /* initialize the semaphores */ Common synchronization pattern: Sem_init(&shared.empty, 0, 1); Producer waits for slot, inserts item in buffer, and notifies consumer void *producer(void *arg); Sem_init(&shared.full, 0, 0); Consumer waits for item, removes it from buffer, and notifies producer void *consumer(void *arg); /* create threads and wait */ struct { Pthread_create(&tid_producer, NULL, int buf; /* shared var */ producer, NULL); Examples sem_t full; /* sems */ Pthread_create(&tid_consumer, NULL, Multimedia processing: sem_t empty; consumer, NULL); } shared; Pthread_join(tid_producer, NULL); Producer creates MPEG video frames, consumer renders them Pthread_join(tid_consumer, NULL); Event-driven graphical user interfaces Producer detects mouse clicks, mouse movements, and keyboard hits exit(0); and inserts corresponding
    [Show full text]
  • A SRAM-Based Architecture for Trie-Based IP Lookup Using FPGA
    16th International Symposium on Field-Programmable Custom Computing Machines A SRAM-based Architecture for Trie-based IP Lookup Using FPGA Hoang Le, Weirong Jiang, Viktor K. Prasanna Ming Hsieh Department of Electrical Engineering University of Southern California Los Angeles, CA 90089, USA {hoangle, weirongj, prasanna}@usc.edu Abstract Most hardware-based solutions for high speed packet forwarding in routers fall into two main catego- Internet Protocol (IP) lookup in routers can be ries: ternary content addressable memory (TCAM)- implemented by some form of tree traversal. Pipelining based and dynamic/static random access memory can dramatically improve the search throughput. How- (DRAM/SRAM)-based solutions. Although TCAM- ever, it results in unbalanced memory allocation over based engines can retrieve results in just one clock the pipeline stages. This has been identified as a major cycle, their throughput is limited by the relatively low challenge for pipelined solutions. In this paper, an IP speed of TCAMs. They are expensive and offer little lookup rate of 325 MLPS (millions lookups per second) flexibility to adapt to new addressing and routing pro- is achieved using a novel SRAM-based bidirectional tocols [3]. As shown in Table 1, SRAMs outperform optimized linear pipeline architecture on Field Pro- TCAMs with respect to speed, density, and power con- grammable Gate Array, named BiOLP, for tree-based sumption. search engines in IP routers. BiOLP can also achieve a Table 1: Comparison of TCAM and SRAM technologies perfectly balanced memory distribution over the pipe- line stages. Moreover, by employing caching to exploit TCAM SRAM the Internet traffic locality, BiOLP can achieve a high (18Mb chip) (18Mb chip) throughput of up to 1.3 GLPS (billion lookups per Maximum clock rate (MHz) 266 [4] 400 [5], [6] second).
    [Show full text]
  • Eodbox Documentation Release 1.0
    EODBox Documentation Release 1.0 Bailey Winter, Jason Gallant May 26, 2016 Contents 1 How Does It Work?? 3 1.1 Utilizing Programmable Real-Time Units (PRUs)............................3 1.2 Device Details and Specifications....................................4 1.3 Run Modes and Data Storage......................................8 2 How Do I Make My Own?? 11 2.1 Getting Started.............................................. 11 2.2 Modifying the BeagleBone for Communication............................. 12 2.3 External Storage............................................. 12 2.4 Modifying the PRU Memory....................................... 14 2.5 Enable the Real-Time Clock....................................... 15 3 Indices and tables 17 i ii EODBox Documentation, Release 1.0 Weakly electric fish are capable of both emitting and detecting electric signals called electric organ discharges (EODs). Current methods of recording EODs use multiple pieces of equipment that are fragile, expensive and inconvenient to transport, and rely on commercial software to record and analyze data. The goal of this project was to create a low cost and portable alternative to current research equipment. We created a device that we beleive circumvents these limitations, based the BeagleBone Black Rev C (BBB). The BBB uses a Texas Instruments AM335x 1GHz ARM© Cortex-A8, a reduced instruction set computing microprocessor that is capable of running two billion instructions per second. This is powerful processor for its size and is capable of running a full operating system. Our goal was to create a device with a user interface that allows for an adjustable, high- speed sampling rate, a designated run time, adjustable gain, flexible storage, and two ‘run modes’: a raw data recording a mode where EODs are automatically extracted.
    [Show full text]
  • Chapter 7: Queues and Deques
    Chapter 7: Queues and Deques After the stack, the next simplest data abstraction is the queue. As with the stack, the queue can be visualized with many examples you are already familiar with from everyday life. A simple illustration is a line of people waiting to enter a theater. The fundamental property of the queue is that items are inserted at one end (the rear of the line) and removed from the other (the door to the theater). This means that the order that items are removed matches the order that they are inserted. Just as a stack was described as a LIFO (last-in, first-out) container, this means a queue can be described as FIFO (first in, first out). A variation is termed the deque, pronounced “deck”, which stands for double-ended queue. In a deque values can be inserted at either the front or the back, and similarly the deck allows values to be removed from either the front or the back. A collection of peas in a straw is a useful mental image. (Or, to update the visual image, a series of tapioca buds in a bubble-tea straw). Queues and deques are used in a number of ways in computer applications. A printer, for example, can only print one job at a time. During the time it is printing there may be many different requests for other output to be printed. To handle these the printer will maintain a queue of pending print tasks. Since you want the results to be produced in the order that they are received, a queue is the appropriate data structure.
    [Show full text]
  • Algorithms and Data Structures for the Modelling of Dynamical Systems by Means of Stochastic Finite Automata
    R . Logozar Algoritmi i podatkovne strukture za modeliranje dinamičkih sustava s pomoću stohastičkih konačnih automata ISSN 1330-3651 UDC/UDK 519.713:004.383 ALGORITHMS AND DATA STRUCTURES FOR THE MODELLING OF DYNAMICAL SYSTEMS BY MEANS OF STOCHASTIC FINITE AUTOMATA Robert Logozar Original scientific paper We elaborate on the design and time-space complexity of data structures and several original algorithms that resulted from the DSA program – a tool that simulates dynamical systems and produces their stochastic finite automata models according to the theory of -machines. An efficient batch iteration algorithm generates the system points and their binary symbols, and stores them in circular buffers realized asclass member arrays. The words extracted from the time series are fed into a dynamically created binary tree of selected height. The tree is then searched for morphologically and stochastically unique subtrees or morphs, by aid of an algorithm that compares (sub)trees by their topology and the descendant nodes' conditional probabilities. The theoretical analysis of algorithms is corroborated by their execution time measurements. The paper exemplifies how an implementation of a scientific modelling tool like the DSA, generates a range of specific algorithmic solutions that can possibly find their broader use. Keywords: algorithms, data structures, time-space complexity, dynamical systems, stochastic finite automata Algoritmi i podatkovne strukture za modeliranje dinamičkih sustava s pomoću stohastičkih konačnih automata Izvorni znanstveni članak Razmatramo dizajn i vremensko-prostornu kompleksnost podatkovnih struktura i originalnih algoritama proisteklih iz DSA programa – alata za modeliranje dinamičkih sustava s pomoću stohastičkih konačnih automata prema teoriji -strojeva . Učinkovita grupna iteracija generira točke sust ava i njihove binarne simbole, te ih pohranjuje ukružne spremnike realizirane s pomoću klasnih članskih poredaka .
    [Show full text]
  • Load-Balancing Succinct B Trees
    Load-Balancing Succinct B Trees Tomohiro I Dominik K¨oppl Abstract We propose a B tree representation storing n keys, each of k bits, in either (a) nk + O(nk= lg n) bits or (b) nk + O(nk lg lg n= lg n) bits of space supporting all B tree operations in either (a) O(lg n) time or (b) O(lg n= lg lg n) time, respectively. We can augment each node with an aggregate value such as the minimum value within its subtree, and maintain these aggregate values within the same space and time complexities. Finally, we give the sparse suffix tree as an application, and present a linear-time algorithm computing the sparse longest common prefix array from the suffix AVL tree of Irving et al. [JDA'2003]. 1 Introduction A B tree [2] is the most ubiquitous data structure found for relational databases and is, like the balanced binary search tree in the pointer machine model, the most basic search data structure in the external memory model. A lot of research has already been dedicated for solving various problems with B trees, and various variants of the B tree have already been proposed (cf. [16] for a survey). Here, we study a space-efficient variant of the B tree in the word RAM model under the context of a dynamic predecessor data structure, which provides the following methods: predecessor(K) returns the predecessor of a given key K (or K itself if it is already stored); insert(K) inserts the key K; and delete(K) deletes the key K.
    [Show full text]
  • Circ-Tree: a B+-Tree Variant with Circular Design for Persistent Memory
    IEEE TRANSACTIONS ON COMPUTERS 1 Circ-Tree: A B+-Tree Variant with Circular Design for Persistent Memory Chundong Wang, Gunavaran Brihadiswarn, Xingbin Jiang, and Sudipta Chattopadhyay Abstract—Several B+-tree variants have been developed to exploit the byte-addressable non-volatile memory (NVM). We attentively investigate the properties of B+-tree and find that, a conventional B+-tree node is a linear structure in which key-value (KV) pairs are maintained from the zero offset of a node. These KV pairs are shifted in a unidirectional fashion for insertions and deletions. Inserting and deleting one KV pair may inflict a large amount of write amplifications due to shifting existing KV pairs. This badly impairs the performance of in-NVM B+-tree. In this paper, we propose a novel circular design for B+-tree. With regard to NVM’s byte-addressability, our Circ-Tree embraces tree nodes in a circular structure without a fixed base address, and bidirectionally shifts KV pairs for insertions and deletions to minimize write amplifications. We have implemented a prototype for Circ-Tree and conducted extensive experiments. Experimental results show that Circ-Tree significantly outperforms two state-of-the-art in-NVM B+-tree variants, i.e., NV-tree and FAST+FAIR, by up to 1.6× and 8.6×, respectively, in terms of write performance. The end-to-end comparison by running YCSB to KV stores built on NV-tree, FAST+FAIR, and Circ-Tree reveals that Circ-Tree yields up to 29.3% and 47.4% higher write performance, respectively, than NV-tree and FAST+FAIR.
    [Show full text]