diff --git a/translations/README-bg.md b/translations/README-bg.md index 233bf8f..1471a87 100644 --- a/translations/README-bg.md +++ b/translations/README-bg.md @@ -713,6 +713,7 @@ - preorder (DFS: self, ляво, дясно) - ### Дървета за двоично търсене: BSTs + - [ ] [Преговор над двоични дървета за търсене (клип)](https://www.youtube.com/watch?v=x6At0nzX92o&index=1&list=PLA5Lqm4uh9Bbq-E0ZnqTIa8LRaL77ica6) - [ ] [Въведение (клип)](https://www.coursera.org/learn/data-structures/lecture/E7cXP/introduction) - [ ] [MIT (клип)](https://www.youtube.com/watch?v=9Jry5-82I68) @@ -739,3 +740,112 @@ - [ ] is_binary_search_tree - [ ] delete_value - [ ] get_successor // връща следващата най-голяма стойност след дадената, -1 ако такава не съществува + +- ### Heap / Priority Queue / Binary Heap + - визуализира се като дърво, но обикновенно е линейна структура (масив, свързан списък) + - [ ] [Heap]() + - [ ] [Въведение (клип)](https://www.coursera.org/learn/data-structures/lecture/2OpTs/introduction) + - [ ] [Наивни имплементации (клип)](https://www.coursera.org/learn/data-structures/lecture/z3l9N/naive-implementations) + - [ ] [Двоични дървета (клип)](https://www.coursera.org/learn/data-structures/lecture/GRV2q/binary-trees) + - [ ] [Tree Height Remark (клип)](https://www.coursera.org/learn/data-structures/supplement/S5xxz/tree-height-remark) + - [ ] [Основни операции (клип)](https://www.coursera.org/learn/data-structures/lecture/0g1dl/basic-operations) + - [ ] [Завършени двоични дървета (клип)](https://www.coursera.org/learn/data-structures/lecture/gl5Ni/complete-binary-trees) + - [ ] [Псевдокод (клип)](https://www.coursera.org/learn/data-structures/lecture/HxQo9/pseudocode) + - [ ] [Heap Sort - jumps to start (клип)](https://youtu.be/odNJmw5TOEE?list=PLFDnELG9dpVxQCxuD-9BSy2E7BWY3t5Sm&t=3291) + - [ ] [Heap Sort (клип)](https://www.coursera.org/learn/data-structures/lecture/hSzMO/heap-sort) + - [ ] [Създаване на heap (клип)](https://www.coursera.org/learn/data-structures/lecture/dwrOS/building-a-heap) + - [ ] [MIT: Heaps and Heap Sort (клип)](https://www.youtube.com/watch?v=B7hVxCmfPtM&index=4&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [CS 61B Lecture 24: Priority Queues (клип)](https://archive.org/details/ucberkeley_webcast_yIUFT6AKBGE) + - [ ] [Linear Time BuildHeap (max-heap)](https://www.youtube.com/watch?v=MiyLo8adrWw) + - [ ] Имплементирайте max-heap: + - [ ] insert + - [ ] sift_up - нужно е за insert + - [ ] get_max - връща най-голямата стойност без да я премахва + - [ ] get_size() - връща броя на елементите + - [ ] is_empty() - връща true ако heap-a не съдържа елементи + - [ ] extract_max - връща най-големия елемент и го премахва + - [ ] sift_down - нужно е за extract_max + - [ ] remove(x) - премахва елемента на индекс x + - [ ] heapify - създава heap от масив от елементи, нужно е за heap_sort + - [ ] heap_sort() - превръща несортиран масив в сортиран такъв, ползвайки max heap или min heap + +## Сортиране + +- [ ] Бележки: + + - Имплементирайте алгоритми за сортиране и знайте сложността в средния/ най-добрия/ най-лошия случай: + - без bubble sort - ужасен алгоритъм е - O(n^2), освен когато n <= 16 + - [ ] Стабилност при сортиращите алгоритми ("Стабилен ли е Quicksort?") + - [Стабилност на сортиращите алгоритми](https://en.wikipedia.org/wiki/Sorting_algorithm#Stability) + - [Стабилност на сортиращите алгоритми](http://stackoverflow.com/questions/1517793/stability-in-sorting-algorithms) + - [Стабилност на сортиращите алгоритми](http://www.geeksforgeeks.org/stability-in-sorting-algorithms/) + - [Стабилност на сортиращите алгоритми](http://homepages.math.uic.edu/~leon/cs-mcs401-s08/handouts/stability.pdf) + - [ ] Кои алгоритми могат да се ползват чрез свързани списъци? Кои чрез масиви? Кои чрез двете? + - Не бих препоръчал да сортирате свързан списък, но би станало с merge sort. + - [Merge Sort за свързани списъци](http://www.geeksforgeeks.org/merge-sort-for-linked-list/) + +- За heapsort, вижте Heap структурата от данни по-горе. Heapsort е чудесен, но не е стабилен + +- [ ] [Sedgewick - Mergesort (5 клипа)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + + - [ ] [1. Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/ARWDq/mergesort) + - [ ] [2. Bottom up Mergesort](https://www.coursera.org/learn/algorithms-part1/lecture/PWNEl/bottom-up-mergesort) + - [ ] [3. Сортираща сложност](https://www.coursera.org/learn/algorithms-part1/lecture/xAltF/sorting-complexity) + - [ ] [4. Компаратори](https://www.coursera.org/learn/algorithms-part1/lecture/9FYhS/comparators) + - [ ] [5. Стабилност](https://www.coursera.org/learn/algorithms-part1/lecture/pvvLZ/stability) + +- [ ] [Sedgewick - Quicksort (4 клипа)](https://www.coursera.org/learn/algorithms-part1/home/week/3) + + - [ ] [1. Quicksort](https://www.coursera.org/learn/algorithms-part1/lecture/vjvnC/quicksort) + - [ ] [2. Селекция](https://www.coursera.org/learn/algorithms-part1/lecture/UQxFT/selection) + - [ ] [3. Дублиращи се ключове](https://www.coursera.org/learn/algorithms-part1/lecture/XvjPd/duplicate-keys) + - [ ] [4. System Sorts](https://www.coursera.org/learn/algorithms-part1/lecture/QBNZ7/system-sorts) + +- [ ] UC Berkeley: + + - [ ] [CS 61B Lecture 29: Sorting I (клип)](https://archive.org/details/ucberkeley_webcast_EiUvYS2DT6I) + - [ ] [CS 61B Lecture 30: Sorting II (клип)](https://archive.org/details/ucberkeley_webcast_2hTY3t80Qsk) + - [ ] [CS 61B Lecture 32: Sorting III (клип)](https://archive.org/details/ucberkeley_webcast_Y6LOLpxg6Dc) + - [ ] [CS 61B Lecture 33: Sorting V (клип)](https://archive.org/details/ucberkeley_webcast_qNMQ4ly43p4) + +- [ ] [Bubble Sort (клип)](https://www.youtube.com/watch?v=P00xJgWzz2c&index=1&list=PL89B61F78B552C1AB) +- [ ] [Анализ на Bubble Sort (клип)](https://www.youtube.com/watch?v=ni_zk257Nqo&index=7&list=PL89B61F78B552C1AB) +- [ ] [Insertion Sort, Merge Sort (клип)](https://www.youtube.com/watch?v=Kg4bqzAqRBM&index=3&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) +- [ ] [Insertion Sort (клип)](https://www.youtube.com/watch?v=c4BRHC7kTaQ&index=2&list=PL89B61F78B552C1AB) +- [ ] [Merge Sort (клип)](https://www.youtube.com/watch?v=GCae1WNvnZM&index=3&list=PL89B61F78B552C1AB) +- [ ] [Quicksort (клип)](https://www.youtube.com/watch?v=y_G9BkAm6B8&index=4&list=PL89B61F78B552C1AB) +- [ ] [Selection Sort (клип)](https://www.youtube.com/watch?v=6nDMgr0-Yyo&index=8&list=PL89B61F78B552C1AB) + +- [ ] Код за Merge sort: + - [ ] [Using output array (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/sorting/mergesort.c) + - [ ] [Using output array (Python)](https://github.com/jwasham/practice-python/blob/master/merge_sort/merge_sort.py) + - [ ] [In-place (C++)](https://github.com/jwasham/practice-cpp/blob/master/merge_sort/merge_sort.cc) +- [ ] Код за Quick sort: + + - [ ] [Имплементация (C)](http://www.cs.yale.edu/homes/aspnes/classes/223/examples/randomization/quick.c) + - [ ] [Имплементация (C)](https://github.com/jwasham/practice-c/blob/master/quick_sort/quick_sort.c) + - [ ] [Имплементация (Python)](https://github.com/jwasham/practice-python/blob/master/quick_sort/quick_sort.py) + +- [ ] Имплементирайте: + + - [ ] Mergesort: O(n log n) сложност в средния/ най-лошия случай + - [ ] Quicksort O(n log n) сложност в средния случай + - Selection sort и insertion sort са със сложност O(n^2) в средния/ най-лошия случай + - За heapsort, вижте Heap структурата от данни нагоре + +- [ ] Не е задължително, но препоръчвам: + - [ ] [Sedgewick - Radix Sorts (6 клипа)](https://www.coursera.org/learn/algorithms-part2/home/week/3) + - [ ] [1. Низове в Java](https://www.coursera.org/learn/algorithms-part2/lecture/vGHvb/strings-in-java) + - [ ] [2. Key Indexed Counting](https://www.coursera.org/learn/algorithms-part2/lecture/2pi1Z/key-indexed-counting) + - [ ] [3. Least Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/c1U7L/lsd-radix-sort) + - [ ] [4. Most Significant Digit First String Radix Sort](https://www.coursera.org/learn/algorithms-part2/lecture/gFxwG/msd-radix-sort) + - [ ] [5. 3 Way Radix Quicksort](https://www.coursera.org/learn/algorithms-part2/lecture/crkd5/3-way-radix-quicksort) + - [ ] [6. Suffix Arrays](https://www.coursera.org/learn/algorithms-part2/lecture/TH18W/suffix-arrays) + - [ ] [Radix Sort](http://www.cs.yale.edu/homes/aspnes/classes/223/notes.html#radixSort) + - [ ] [Radix Sort (video)](https://www.youtube.com/watch?v=xhr26ia4k38) + - [ ] [Radix Sort, Counting Sort (linear time given constraints) (video)](https://www.youtube.com/watch?v=Nz1KZXbghj8&index=7&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb) + - [ ] [Randomization: Matrix Multiply, Quicksort, Freivalds' algorithm (video)](https://www.youtube.com/watch?v=cNB2lADK3_s&index=8&list=PLUl4u3cNGP6317WaSNfmCvGym2ucw3oGp) + - [ ] [Сортиране в линейно време (клип)](https://www.youtube.com/watch?v=pOKy3RZbSws&list=PLUl4u3cNGP61hsJNdULdudlRL493b-XZf&index=14) + +Като обобщение, това е визуализация на [15 алгоритъма за сортиране](https://www.youtube.com/watch?v=kPRA0W1kECg). +Ако ви трябват повече детайли на тази тема вижте секцията "Сортиране" в[Допълнителни детайли по някои теми](#допълнителни-детайли-по-някои-теми)