Data structure cheat sheet: Difference between revisions
Hoppinglife (talk | contribs) |
Hoppinglife (talk | contribs) |
||
| Line 86: | Line 86: | ||
== Graphs == | == Graphs == | ||
=== Storage === | === Storage === | ||
Fundamentally, the representation of a graph is always equivalent to an adjacent matrix. The most usual methods are uncompressed matrix, adjacent list, and compressed matrix. | |||
=== Traverse === | === Traverse === | ||
=== Properties === | === Properties === | ||
Revision as of 18:13, 25 October 2020
A quick cheat sheet on common algorithms and data structures:
Linear Structures
Linked Lists
Basic Implementation
String
Related Algorithms
Arrays
Sorting
Simple Sort
Insertion sort.
Quick Sort
The core of the quicksort is dividing the sorting array into half and repeat this operation.
Merge Sort
Tree-based Structures
Binary Tree
Property
Traversal
Heap
A (binary) heap is a complete binary tree that keeps a sepcific condition of its nodes: For a max-heap, , for a min-heap, . A heap can be used to maintain a priority queue. A heap is often stored as a continous vector.
Heapify
Heapify is a fundamental operation to keep the heap property when there is a new node inserted into the root.
Complexity: . You can prove that using recusion master theroem.
Build a heap
To build a heap, call heapify() n/2 times for all non-leaf nodes.
Complexity:
Heapsort
To sort an array in increasing order, build a max heap, put the first element to the final position of the array, and maintain the heap property by calling heapify with the remaining element.
Complexity:
Priority Queue
A (max) priority queue support four operations: insert, max, extract-max, increase-key. With a heap, these four operations can be done using , , , time.
Codes
void max_heapify(Node* A, int size, int start) {
auto largest = start;
if(start * 2 < size && A[largest] < A[start * 2])
largest = start * 2;
if(start * 2 + 1 < size && A[largest] < A[start * 2 + 1])
largest = start * 2 + 1;
if(largest != start) {
swap(A[start], A[largest]);
maxheapify(A, size, largest);
}
}
void build_max_heap(Node* A, int size) {
for(int i = size / 2; i >= 0; --i) {
max_heapify(A, size, i);
}
}
n-ary Tree
Union Find
Hashing Table
Graphs
Storage
Fundamentally, the representation of a graph is always equivalent to an adjacent matrix. The most usual methods are uncompressed matrix, adjacent list, and compressed matrix.