Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History
309 lines (261 loc) · 23.9 KB

File metadata and controls

309 lines (261 loc) · 23.9 KB

Algoritme dan Struktur Data Javascript

CIcodecov

Repositori ini berisi contoh-contoh algoritme dan struktur data yang populer menggunakan JavaScript.

Setiap algoritma dan struktur data memiliki README-nya tersendiri dengan penjelasan yang berkaitan dan tautan untuk bacaan lebih lanjut (termasuk tautan menuju video YouTube).

Baca ini dalam bahasa yang lain:English, 简体中文, 繁體中文, 한국어, 日本語, Polski, Français, Español, Português, Русский, Türk, Italiana, Українська, Arabic, Tiếng Việt, Deutsch

☝ Perhatikan bahwa proyek ini hanya dimaksudkan untuk tujuan pembelajaran dan riset, dan tidak dimaksudkan untuk digunakan sebagai produksi.

Struktur Data

Struktur data adalah cara tertentu untuk mengatur dan menyimpan data dalam komputer sehingga dapat diakses dan diubah secara efisien. Lebih tepatnya, struktur data adalah kumpulan dari nilai data, relasi di antara data-data, dan fungsi atau operasi yang dapat diterapkan pada data.

P - Pemula, L - Lanjutan

Algoritma

Algoritma adalah sebuah perincian yang jelas tentang cara untuk memecahkan suatu masalah. Ia adalah sekumpulan aturan yang menjelaskan secara tepat urutan-urutan dari sebuah operasi.

P - Pemula, L - Lanjutan

Algoritma Berdasarkanan Topik

Algoritma Berdasarkan Paradigma

Paradigma algoritmik adalah sebuah metode atau pendekatan umum yang mendasari desain sebuah tingkatan algoritma. Paradigma algoritmik merupakan abstraksi yang lebih tinggi dari gagasan sebuah algoritma, seperti halnya sebuah algoritma merupakan abstraksi yang lebih tinggi dari sebuah program komputer.

Cara menggunakan repositori ini

Meng-install semua dependensi

npm install

Menjalankan ESLint

Anda dapat menjalankannya untuk memeriksa kualitas kode.

npm run lint

Menjalankan semua tes

npm test

Menjalankan tes berdasarkan nama

npm test -- 'LinkedList'

Playground

Anda dapat bermain dengan algoritma dan struktur data di file./src/playground/playground.js dan menuliskan tesnya di ./src/playground/__test__/playground.test.js.

Lalu, hanya tinggal menjalankan perintah berikut untuk mengetes apakah kode playground anda bekerja sesuai dengan keinginan:

npm test -- 'playground'

Informasi Bermanfaat

Referensi

▶ Algoritma dan Struktur Data di YouTube

Notasi Big O

Notasi Big O digunakan untuk mengklasifikasikan algoritma berdasarkan durasi atau ruang yang dibutuhkan seiring bertambahnya input. Pada grafik dibawah, anda dapat menemukan urutan pertumbuhan yang paling umum dari algoritma yang ditentukan dalam notasi Big O.

Big O graphs

Sumber: Big O Cheat Sheet.

Di bawah ini adalah daftar dari beberapa notasi Big O yang sering digunakan dan perbandingan kinerjanya terhadap berbagai ukuran input data.

Notasi Big OKomputasi untuk 10 elemenKomputasi untuk 100 elemenKomputasi untuk 1000 elemen
O(1)111
O(log N)369
O(N)101001000
O(N log N)306009000
O(N^2)100100001000000
O(2^N)10241.26e+291.07e+301
O(N!)36288009.3e+1574.02e+2567

Kompleksitas Operasi Struktur Data

Struktur DataAksesPencarianPenyisipanPenghapusanKeterangan
Array (Larik)1nnn
Stack (Tumpukan)nn11
Queue (Antrean)nn11
Linked List (Senarai Berantai)nn1n
Hash Table-nnnApabila fungsi hash sempurna, biayanya akan menjadi O(1)
Binary Search Tree (Pohon Telusur Biner)nnnnApabila pohon seimbang, biayanya akan menjadi O(log(n))
B-Treelog(n)log(n)log(n)log(n)
Red-Black Tree (Pohon Merah-Hitam)log(n)log(n)log(n)log(n)
AVL Treelog(n)log(n)log(n)log(n)
Bloom Filter-11-Positif palsu dimungkinkan saat pencarian

Kompleksitas Algoritma Sortir Larik

NamaTerbaikRata-rataTerburukMemoriStabilKeterangan
Bubble sort (Sortir Gelembung)nn2n21Ya
Insertion sort (Sortir Sisipan)nn2n21Ya
Selection sort (Sortir Seleksi)n2n2n21Tidak
Heap sort (Sortir Heap)n log(n)n log(n)n log(n)1Tidak
Merge Sort (Sortir Gabungan)n log(n)n log(n)n log(n)nYa
Quick sort (Sortir Cepat)n log(n)n log(n)n2log(n)TidakSortir Cepat biasanya dilakukan secara in-place dengan O(log(n)) ruang tumpukan
Shell sort (Sortir Shell)n log(n)tergantung pada jarak urutann (log(n))21Tidak
Counting sort (Sortir Perhitungan)n + rn + rn + rn + rYar - angka terbesar dalam larik
Radix sort (Sortir Akar)n * kn * kn * kn + kYak - panjang dari kunci terpanjang

Pendukung Proyek

Anda dapat mendukung proyek ini via ❤️️ GitHub atau ❤️️ Patreon.

Orang-orang yang mendukung proyek ini∑ = 1

ℹ️ A few more projects and articles about JavaScript and algorithms on trekhleb.dev