javascript-algorithms/README.bs-BA.md
2021-05-06 00:09:06 +02:00

23 KiB
Raw Blame History

JavaScript Algoritmi i Strukture podataka

IN PROGRESS...

CI codecov

Ovaj repozitorij sadrzi JavaScript bazirane primjere od vise popularnih Algoritama i Struktura podataka.

Svaki Algoritam i Struktura podataka ima svoj vlastiti, poseban README koji je povezan sa objasnjenjima i linkovima za dalje citanje (ukljucujuci i Youtube video materijale).

procitajte na drugim jezicima: Arabic, Türk, Русский, Français, Italiana, 简体中文, 繁體中文, 한국어, 日本語, Polski, Español, Português, Bahasa Indonesia, Українська,

☝ Ovaj projekt je osmisljen da se koristi iskljucivo u svrhe ucenja i nacunog istrazivanja, i nije osmisljen da bude koristen u produkciji.

Strukture Podataka

Struktura podataka je poseban način organiziranja i pohranjivanja podataka u računar kako bi istim mogloe ofikasno pristupiti i mijenjati. Preciznije, struktura podataka je zbirka podataka vrijednosti, odnosa među njima, funkcije ili operacije koje se mogu primijeniti na podatke.

B - Pocetnik - Beginner, A - Napredni - Advanced

Algoritmi

Algoritam je nedvosmislena specifikacija kako riješiti klasu problema. To je skup pravila koja precizno definiraju niz operacija.

B - Pocetnik - Beginner, A - Napredni - Advanced

Algoritmi po temama

Algoritmi Paradigme

Algoritmička paradigma je generička metoda ili pristup koji leži u osnovi dizajna klase algoritama. To je apstrakcija viša od pojma algoritma, baš kao i sto je i algoritam viša apstrakcija od računarskog programa.

Kako koristiti ovaj repozitorij

Instaliraj dependencies

npm install

Pokreni ESLint

You may want to run it to check code quality.

npm run lint

Pokreni sve tests

npm test

Pokreni testove po imenu

npm test -- 'LinkedList'

Problematika i kako je rijesiti

In case if linting or testing is failing try to delete the node_modules folder and re-install npm packages:

rm -rf ./node_modules
npm i

Playground

You may play with data-structures and algorithms in ./src/playground/playground.js file and write tests for it in ./src/playground/__test__/playground.test.js.

Then just simply run the following command to test if your playground code works as expected:

npm test -- 'playground'

Useful Information

References

▶ Data Structures and Algorithms on YouTube

Big O Notation

Big O notation is used to classify algorithms according to how their running time or space requirements grow as the input size grows. On the chart below you may find most common orders of growth of algorithms specified in Big O notation.

Big O graphs

Source: Big O Cheat Sheet.

Below is the list of some of the most used Big O notations and their performance comparisons against different sizes of the input data.

Big O Notation Computations for 10 elements Computations for 100 elements Computations for 1000 elements
O(1) 1 1 1
O(log N) 3 6 9
O(N) 10 100 1000
O(N log N) 30 600 9000
O(N^2) 100 10000 1000000
O(2^N) 1024 1.26e+29 1.07e+301
O(N!) 3628800 9.3e+157 4.02e+2567

Data Structure Operations Complexity

Data Structure Access Search Insertion Deletion Comments
Array 1 n n n
Stack n n 1 1
Queue n n 1 1
Linked List n n 1 n
Hash Table - n n n In case of perfect hash function costs would be O(1)
Binary Search Tree n n n n In case of balanced tree costs would be O(log(n))
B-Tree log(n) log(n) log(n) log(n)
Red-Black Tree log(n) log(n) log(n) log(n)
AVL Tree log(n) log(n) log(n) log(n)
Bloom Filter - 1 1 - False positives are possible while searching

Array Sorting Algorithms Complexity

Name Best Average Worst Memory Stable Comments
Bubble sort n n2 n2 1 Yes
Insertion sort n n2 n2 1 Yes
Selection sort n2 n2 n2 1 No
Heap sort n log(n) n log(n) n log(n) 1 No
Merge sort n log(n) n log(n) n log(n) n Yes
Quick sort n log(n) n log(n) n2 log(n) No Quicksort is usually done in-place with O(log(n)) stack space
Shell sort n log(n) depends on gap sequence n (log(n))2 1 No
Counting sort n + r n + r n + r n + r Yes r - biggest number in array
Radix sort n * k n * k n * k n + k Yes k - length of longest key

Project Backers

You may support this project via ❤️ GitHub or ❤️ Patreon.

Folks who are backing this project ∑ = 0