Insert a New Element Before Or After the Kth Element – Delete the Kth Element of the List

Insert a New Element Before Or After the Kth Element – Delete the Kth Element of the List

Algorithmics (6EAP) MTAT.03.238 Linear structures, sorting, searching, Recurrences, Master Theorem... Jaak Vilo 2020 Fall Jaak Vilo 1 Big-Oh notation classes Class Informal Intuition Analogy f(n) ∈ ο ( g(n) ) f is dominated by g Strictly below < f(n) ∈ O( g(n) ) Bounded from above Upper bound ≤ f(n) ∈ Θ( g(n) ) Bounded from “equal to” = above and below f(n) ∈ Ω( g(n) ) Bounded from below Lower bound ≥ f(n) ∈ ω( g(n) ) f dominates g Strictly above > Linear, sequential, ordered, list … Memory, disk, tape etc – is an ordered sequentially addressed media. Physical ordered list ~ array • Memory /address/ – Garbage collection • Files (character/byte list/lines in text file,…) • Disk – Disk fragmentation Data structures • https://en.wikipedia.org/wiki/List_of_data_structures • https://en.wikipedia.org/wiki/List_of_terms_relating_to_algo rithms_and_data_structures Linear data structures: Arrays • Array • Hashed array tree • Bidirectional map • Heightmap • Bit array • Lookup table • Bit field • Matrix • Bitboard • Parallel array • Bitmap • Sorted array • Circular buffer • Sparse array • Control table • Sparse matrix • Image • Iliffe vector • Dynamic array • Variable-length array • Gap buffer Linear data structures: Lists • Doubly linked list • Array list • Xor linked list • Linked list • Zipper • Self-organizing list • Doubly connected edge • Skip list list • Unrolled linked list • Difference list • VList Lists: Array 0 1 size MAX_SIZE-1 3 6 7 5 2 L = int[MAX_SIZE] L[2]=7 Lists: Array 0 1 size MAX_SIZE-1 3 6 7 5 2 L = int[MAX_SIZE] L[2]=7 L[size++] = new 1 2 size MAX_SIZE 3 6 7 5 2 L[3]=7 L[++size] = new Multiple lists, 2-D-arrays, etc… 2D array & A[i,j] = A + i*(nr_el_in_row*el_size) + j*el_size Linear Lists • Operations which one may want to perform on a linear list of n elements include: – gain access to the kth element of the list to examine and/or change the contents – insert a new element before or after the kth element – delete the kth element of the list Reference: Knuth, The Art of Comptuer Programming, Vol 1, Fundamental Algorithms, 3rd Ed., p.238-9 Abstract Data Type (ADT) • High-level definition of data types • An ADT specifies – A collection of data – A set of operations on the data or subsets of the data • ADT does not specify how the operations should be implemented • Examples – vector, list, stack, queue, deque, priority queue, table (map), associative array, set, graph, digraph ADT • A datatype is a set of values and an associated set of operations • A datatype is abstract iff it is completely described by its set of operations regradless of its implementation • This means that it is possible to change the implementation of the datatype without changing its use • The datatype is thus described by a set of procedures • These operations are the only thing that a user of the abstraction can assume Primitive & composite types Primitive types Composite types • Boolean (for boolean values True/False) • Array • Char (for character values) • Record (also called tuple • int (for integral or fixed-precision or struct) values) • Union • Float (for storing real number values) • Tagged union (also called a • Double (a larger size of type float) variant, variant record, • String (for string of chars) discriminated union, or • Enumerated type disjoint union) • Plain old data structure Abstract data types: • Dictionary (key,value) • Stack (LIFO) • Queue (FIFO) • Queue (double-ended) • Priority queue (fetch highest-priority object) • ... Abstract Data Types (ADT) • Some common ADTs, which have proved useful in a great variety of applications, are Container Stack List Graph Set Queue Multiset Priority queue Map Double-ended queue Multimap Double-ended priority queue • Each of these ADTs may be defined in many ways and variants, not necessarily equivalent. Dictionary • Container of key-element (k,e) pairs • Required operations: – insert( k,e ), – remove( k ), – find( k ), – isEmpty() • May also support (when an order is provided): – closestKeyBefore( k ), – closestElemAfter( k ) • Note: No duplicate keys Some data structures for Dictionary ADT • Unordered – Array – Sequence/list • Ordered – Array – Sequence (Skip Lists) – Binary Search Tree (BST) – AVL trees, red-black trees – (2; 4) Trees – B-Trees • Valued – Hash Tables – Extendible Hashing Linear data structures Arrays • Hashed array Lists tree • Array • Heightmap • Doubly linked list • Bidirectional • • Linked list map Lookup table • • Bit array Matrix • Self-organizing list • • Bit field Parallel array • Skip list • Sorted array • Bitboard • Unrolled linked list • Sparse array • Bitmap • • VList • Circular buffer Sparse matrix • • Xor linked list • Control table Iliffe vector • • Image Variable-length • Zipper array • Dynamic array • Doubly connected edge list • Gap buffer Trees … Binary trees • Treap • Soft heap • Ctrie • Interval tree • BK-tree • AA tree • Weight-balanced • Pairing heap • Range tree • Bounding • AVL tree tree • Leftist heap Multiway trees • Bin interval • Binary search • Treap • Ternary search • Kd-tree hierarchy • tree B-trees • Beap tree • Implicit kd-tree BSP tree • Binary tree • B-tree • Skew heap • And–or tree • Min/max kd-tree • Rapidly-exploring random tree • Cartesian tree • B+ tree • Ternary heap • (a,b)-tree • Adaptive k-d tree • Pagoda • B*-tree • D-ary heap • Link/cut tree • Kdb tree • Randomized • B sharp tree • • SPQR-tree • Quadtree Application-specific binary search • Dancing tree • Tries • Spaghetti stack • Octree trees tree • 2-3 tree • Trie • Disjoint-set data • Linear octree • Syntax tree • Red-black tree • 2-3-4 tree • Radix tree structure • Z-order • Abstract syntax • Rope • • Queap • Suffix tree Fusion tree • UB-tree tree • Scapegoat tree • Fusion tree • Suffix array • Enfilade • R-tree • Parse tree • Self-balancing • • Bx-tree • Compressed Exponential tree • R+ tree • Decision tree binary search • Fenwick tree tree suffix array • R* tree • Alternating Heaps • Van Emde Boas decision tree • Splay tree • FM-index • Hilbert R-tree • Heap • tree • Minimax tree • T-tree Generalised • X-tree • Binary heap suffix tree • Expectiminimax • Tango tree • Metric tree • Binomial heap • B-trie tree • • Cover tree Threaded binary Space-partitioning • Finger tree tree • Fibonacci heap • Judy array • M-tree • • trees • Top tree AF-heap X-fast trie • VP-tree • 2-3 heap • Y-fast trie • Segment tree Hashes, Graphs, Other • Hashes Graphs • Propositional directed • Bloom filter • Adjacency list acyclic graph • Distributed hash table • Adjacency matrix • Multigraph • Hash array mapped • Graph-structured • Hypergraph trie stack • Hash list • Scene graph Other • Hash table • Binary decision • Lightmap • Hash tree diagram • Winged edge • Hash trie • Zero suppressed • Quad-edge • Koorde decision diagram • Routing table • • Prefix hash tree And-inverter graph • Symbol table • • Directed graph • Directed acyclic graph *array (memory address) Lists: Array size MAX_SIZE 0 1 size MAX_SIZE-1 3 6 7 5 2 0 1 size 3 6 7 8 25 2 Insert 8 after L[2] 0 1 size 3 6 7 8 25 2 Delete last Lists: Array • Access i O(1) • Insert to end O(1) • Delete from end O(1) • Insert O(n) • Delete O(n) • Search O(n) 0 1 size 3 6 7 8 25 2 Insert 8 after L[2] 0 1 size 3 6 7 8 25 2 Delete last Linear Lists • Other operations on a linear list may include: – determine the number of elements – search the list – sort a list – combine two or more linear lists – split a linear list into two or more lists – make a copy of a list Linked lists head tail Singly linked head tail Doubly linked Linked lists: add head tail head tail size Linked lists: delete head tail (+ garbage collection?) head tail size • Array indexed from 0 to n – 1: k = 1 1 < k < n k = n access/change the kth element O(1) O(1) O(1) insert before or after the kth element O(n) O(n) O(1) delete the kth element O(n) O(n) O(1) • Singly-linked list with head and tail pointers k = 1 1 < k < n k = n access/change the kth element O(1) O(n) O(1) insert before or after the kth element O(1) O(n) O(1)1 O(n) O(1) delete the kth element O(1) O(n) O(n) • Doubly linked list k = 1 1 < k < n k = n access/change the kth element O(1) O(n) O(1) insert before or after the kth element O(1) O(1)1 O(1) delete the kth element O(1) O(1)1 O(1) Introduction to linked lists • Consider the following struct definition struct node { string word; int num; node *next; //pointer for the next node }; node *p = new node; p ? ? ? num word next Introduction to linked lists: inserting a node • node *p; • p = new node; • p->num = 5; • p->word = "Ali"; • p->next = NULL • p 5 Ali num word next Introduction to linked lists: adding a new node • How can you add another node that is pointed by p->link? • node *p; • p = new node; • p->num = 5; • p->word = "Ali"; • p->next = NULL; • node *q; q • p 5 Ali ? num word link Introduction to linked lists node *p; p = new node; p->num = 5; p->word = "Ali"; p->next = NULL; node *q; q q = new node; p 5 Ali ? ? ? ? num word link num word link Introduction to linked lists node *p, *q; p = new node; p->num = 5; p->word = "Ali"; p->next = NULL; q = new node; q->num=8; q->word = "Veli"; q p 5 Ali ? 8 Veli ? num word next num word next Introduction to linked lists node *p, *q; p = new node; p->num = 5; p->word = "Ali"; p->next = NULL; q = new node; q->num=8; q->word = "Veli"; p->next = q; q->next = NULL; q p 5 Ali ? 8 Veli num word link num word link Pointers in C/C++ p = new node ; delete p ; p = new node[20] ; p = malloc( sizeof( node ) ) ; free p ; p = malloc( sizeof( node ) * 20 ) ; (p+10)->next = NULL ; /* 11th elements */ Book-keeping • malloc, new – “remember” what has been created free(p), delete (C/C++) • When you need many small areas to be allocated, reserve a big chunk (array) and maintain your own set of free objects • Elements of array of objects can be pointed by the pointer to an object.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    191 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us