Saya awalnya membuat ini sebagai daftar topik studi singkat yang harus dilakukan untuk menjadi seorang insinyur perangkat lunak, tetapi daftar ini berkembang menjadi daftar besar yang Anda lihat sekarang. Setelah melalui rencana studi ini, saya dipekerjakan sebagai Insinyur Pengembangan Perangkat Lunak di Amazon! Anda mungkin tidak perlu belajar sebanyak saya. Bagaimanapun, semua yang Anda butuhkan ada di sini.
Saya belajar sekitar 8-12 jam sehari, selama beberapa bulan. Inilah kisah saya: Mengapa saya belajar penuh waktu selama 8 bulan untuk wawancara Google
Harap Dicatat: Anda tidak perlu belajar sebanyak saya. Saya membuang banyak waktu untuk hal-hal yang tidak perlu saya ketahui. Informasi lebih lanjut tentang itu ada di bawah. Saya akan membantu Anda sampai di sana tanpa membuang waktu Anda yang berharga.
Item yang tercantum di sini akan mempersiapkan Anda dengan baik untuk wawancara teknis di hampir semua perusahaan perangkat lunak, termasuk raksasa: Amazon, Facebook, Google, dan Microsoft.
Semoga sukses untuk Anda!
Bahasa Indonesia
Bulgaria
Spanyol
Jerman
Jepang (日本語)
Marathi
Polandia
Brasileiro Portugis
Rusia
Tiếng Việt - Vietnam
Urdu - اردو
Uzbekistan
বাংলা - Bangla
ខ្មែរ - Khmer
简体中文
繁體中文
Afrikanas
Arab
Perancis
Orang yunani
Italia
Korea (한국어)
Malayalam
Persia - Farsi
Telugu
Thai
Turki
Українська
עברית
हिन्दी
Menjadi sponsor dan dukung Coding Interview University!
Ini adalah rencana studi multi-bulan saya untuk menjadi insinyur perangkat lunak di sebuah perusahaan besar.
Diperlukan:
Sedikit pengalaman dengan coding (variabel, loop, metode/fungsi, dll)
Kesabaran
Waktu
Perhatikan bahwa ini adalah rencana studi untuk rekayasa perangkat lunak , bukan rekayasa frontend atau pengembangan full-stack. Ada peta jalan dan kursus yang sangat bagus untuk jalur karier tersebut di tempat lain (lihat https://roadmap.sh/ untuk info lebih lanjut).
Ada banyak hal yang harus dipelajari dalam program Ilmu Komputer universitas, tetapi hanya mengetahui sekitar 75% saja sudah cukup untuk wawancara, jadi itulah yang saya bahas di sini. Untuk program otodidak Ilmu Komputer yang lengkap, sumber daya untuk rencana studi saya telah disertakan dalam Peta Jalan Ilmu Komputer Kamran Ahmed: https://roadmap.sh/computer-science
Apa itu?
Mengapa menggunakannya?
Bagaimana cara menggunakannya
Jangan merasa Anda tidak cukup pintar
Catatan Tentang Sumber Daya Video
Pilih Bahasa Pemrograman
Buku untuk Struktur Data dan Algoritma
Buku Persiapan Wawancara
Jangan Membuat Kesalahan Saya
Apa yang Tidak Akan Anda Lihat Tercakup
Rencana Harian
Latihan Soal Coding
Masalah Pengkodean
Kompleksitas algoritmik / Big-O / Analisis asimtotik
Struktur Data
Array
Daftar Tertaut
Tumpukan
Antre
Tabel hash
Lebih Banyak Pengetahuan
Pencarian biner
Operasi bitwise
Pohon
Pohon - Pendahuluan
Pohon pencarian biner: BST
Heap / Antrian Prioritas / Heap Biner
pohon pencarian seimbang (konsep umum, bukan detail)
penjelajahan: preorder, inorder, postorder, BFS, DFS
Penyortiran
pilihan
insersi
tumpukan
sortir cepat
penggabungan
Grafik
diarahkan
tidak terarah
matriks ketetanggaan
daftar kedekatan
penjelajahan: BFS, DFS
Bahkan Lebih Banyak Pengetahuan
Rekursi
Pemrograman Dinamis
Pola Desain
Kombinatorik (n pilih k) & Probabilitas
Algoritma NP, NP-Lengkap dan Perkiraan
Bagaimana komputer memproses suatu program
Tembolok
Proses dan Thread
Pengujian
Pencarian & manipulasi string
Mencoba
Angka Titik Mengambang
Unikode
Endianisme
Jaringan
Tinjauan Akhir
Perbarui Resume Anda
Temukan Pekerjaan
Proses Wawancara & Persiapan Wawancara Umum
Pikirkan kapan wawancara akan tiba
Punya pertanyaan untuk pewawancara
Setelah Anda Mendapatkan Pekerjaan
---------------- Segala sesuatu di bawah titik ini adalah opsional ----------------
Buku Tambahan
Desain Sistem, Skalabilitas, Penanganan Data (jika Anda memiliki pengalaman 4+ tahun)
Pembelajaran Tambahan
pohon AVL
Perlebar pohon
Pohon merah/hitam
2-3 pohon pencarian
2-3-4 Pohon (alias 2-4 pohon)
Pohon N-ary (K-ary, M-ary).
B-Pohon
Kompiler
Emacs dan vi(m)
Alat baris perintah Unix
Teori informasi
Paritas & Kode Hamming
Entropi
Kriptografi
Kompresi
Keamanan Komputer
Pengumpulan sampah
Pemrograman Paralel
Sistem Pesan, Serialisasi, dan Antrian
A*
Transformasi Fourier Cepat
Filter Mekar
HyperLogLog
Hashing yang Sensitif terhadap Lokalitas
Pohon van Emde Boas
Struktur Data yang Ditambah
Pohon pencarian yang seimbang
pohon kD
Lewati daftar
Arus Jaringan
Himpunan Terpisah & Pencarian Gabungan
Matematika untuk Pemrosesan Cepat
Mengobati
Pemrograman Linier
Geometri, Lambung cembung
Matematika diskrit
Detail Tambahan tentang Beberapa Mata Pelajaran
Seri Video
Kursus Ilmu Komputer
Dokumen
Jika Anda ingin bekerja sebagai software engineer di perusahaan besar, berikut hal-hal yang perlu Anda ketahui.
Jika Anda gagal mendapatkan gelar di bidang ilmu komputer, seperti yang saya alami, ini akan mengejar ketinggalan Anda dan menyelamatkan empat tahun hidup Anda.
Ketika saya memulai proyek ini, saya tidak mengetahui tumpukan dari tumpukan, tidak mengetahui apa pun tentang Big-O, atau apa pun tentang pepohonan, atau cara menelusuri grafik. Jika saya harus membuat kode algoritma pengurutan, saya tahu itu akan sangat buruk. Setiap struktur data yang pernah saya gunakan dibangun ke dalam bahasa tersebut, dan saya tidak tahu cara kerjanya sama sekali. Saya tidak pernah harus mengelola memori kecuali proses yang saya jalankan akan memberikan kesalahan "kehabisan memori", dan kemudian saya harus mencari solusinya. Saya menggunakan beberapa array multidimensi dan ribuan array asosiatif dalam hidup saya, tetapi saya tidak pernah membuat struktur data dari awal.
Ini rencana yang panjang. Mungkin perlu waktu berbulan-bulan. Jika Anda sudah familiar dengan banyak hal ini, Anda akan membutuhkan lebih sedikit waktu.
⬆ kembali ke atas
Segala sesuatu di bawah ini adalah garis besarnya, dan Anda harus menangani item-item tersebut secara berurutan dari atas ke bawah.
Saya menggunakan variasi penurunan harga khusus GitHub, termasuk daftar tugas untuk melacak kemajuan.
Lebih lanjut tentang penurunan harga seperti GitHub
Di halaman ini, klik tombol Kode di dekat bagian atas, lalu klik "Unduh ZIP". Buka zip file dan Anda dapat bekerja dengan file teks.
Jika Anda membuka editor kode yang memahami penurunan harga, Anda akan melihat semuanya diformat dengan baik.
Buat cabang baru agar Anda dapat memeriksa item seperti ini, cukup beri tanda x di dalam tanda kurung: [x]
Fork repo GitHub: https://github.com/jwasham/coding-interview-university
dengan mengklik tombol Fork.
Kloning ke repo lokal Anda:
git clone https://github.com/<YOUR_GITHUB_USERNAME>/coding-interview-university.gitcd coding-interview-university git remote tambahkan hulu https://github.com/jwasham/coding-interview-university.git git remote set-url --push upstream DISABLE # sehingga Anda tidak mendorong kemajuan pribadi Anda kembali ke repo asli
Tandai semua kotak dengan X setelah Anda menyelesaikan perubahan:
git commit -am "Kemajuan pribadi yang ditandai" git pull upstream main # selalu perbarui fork Anda dengan perubahan dari repogit push asli # cukup dorong ke fork Anda
⬆ kembali ke atas
Insinyur perangkat lunak yang sukses memang cerdas, namun banyak yang merasa tidak aman karena mereka tidak cukup pintar.
Video berikut mungkin dapat membantu Anda mengatasi rasa tidak aman ini:
Mitos Programmer Jenius
Berbahaya jika Pergi Sendirian: Melawan Monster Tak Terlihat di Teknologi
⬆ kembali ke atas
Beberapa video hanya tersedia dengan mendaftar di kelas Coursera atau EdX. Ini disebut MOOC. Kadang kelasnya tidak ada sesinya jadi harus menunggu beberapa bulan, jadi tidak punya akses.
Sebaiknya ganti sumber kursus online dengan sumber publik yang gratis dan selalu tersedia, seperti video YouTube (sebaiknya kuliah di universitas), sehingga Anda dapat mempelajarinya kapan saja, tidak hanya saat kursus online tertentu sedang berlangsung.
⬆ kembali ke atas
Anda harus memilih bahasa pemrograman untuk wawancara pengkodean yang Anda lakukan, tetapi Anda juga harus menemukan bahasa yang dapat Anda gunakan untuk mempelajari konsep ilmu komputer.
Sebaiknya bahasanya sama, jadi Anda hanya perlu mahir dalam satu bahasa saja.
Saat saya membuat rencana studi, sebagian besar saya menggunakan 2 bahasa: C dan Python
C: Tingkat yang sangat rendah. Memungkinkan Anda menangani pointer dan alokasi/dealokasi memori, sehingga Anda merasakan struktur data dan algoritma di tulang Anda. Dalam bahasa tingkat tinggi seperti Python atau Java, ini disembunyikan dari Anda. Dalam pekerjaan sehari-hari, hal ini luar biasa, namun ketika Anda mempelajari bagaimana struktur data tingkat rendah ini dibangun, sangat menyenangkan untuk merasa dekat dengan hal tersebut.
Ini adalah buku yang singkat, tetapi akan memberi Anda pemahaman yang baik tentang bahasa C dan jika Anda berlatih sedikit, Anda akan segera menjadi mahir. Memahami C membantu Anda memahami cara kerja program dan memori.
Anda tidak perlu terlalu mendalami buku ini (atau bahkan menyelesaikannya). Pergilah ke tempat yang Anda rasa nyaman untuk membaca dan menulis dalam C.
C ada dimana-mana. Anda akan melihat contohnya di buku, ceramah, video, di mana pun saat Anda belajar.
Bahasa Pemrograman C, Edisi ke-2
Python: Modern dan sangat ekspresif, saya mempelajarinya karena sangat berguna dan juga memungkinkan saya menulis lebih sedikit kode dalam sebuah wawancara.
Ini adalah preferensi saya. Anda melakukan apa yang Anda suka, tentu saja.
Anda mungkin tidak memerlukannya, tetapi berikut beberapa situs untuk belajar bahasa baru:
Latihan
perang kode
Peretas Bumi
Topik Scaler (Java, C++)
Tantangan Komunitas Programiz PRO)
Anda dapat menggunakan bahasa yang Anda sukai untuk melakukan bagian pengkodean wawancara, tetapi untuk perusahaan besar, ini adalah pilihan yang tepat:
C++
Jawa
ular piton
Anda juga bisa menggunakan ini, tetapi bacalah terlebih dahulu. Mungkin ada peringatan:
JavaScript
Rubi
Berikut artikel yang saya tulis tentang memilih bahasa untuk wawancara: Pilih Satu Bahasa untuk Wawancara Coding. Ini adalah artikel asli yang menjadi dasar postingan saya: Memilih Bahasa Pemrograman untuk Wawancara
Anda harus sangat nyaman dalam bahasa tersebut dan berpengetahuan luas.
Baca lebih lanjut tentang pilihan:
Pilih Bahasa yang Tepat untuk Wawancara Coding Anda
Lihat sumber daya khusus bahasa di sini
⬆ kembali ke atas
Buku ini akan menjadi landasan Anda dalam ilmu komputer.
Pilih saja salah satu, dalam bahasa yang Anda rasa nyaman. Anda akan banyak membaca dan mengkode.
Algoritma dalam C, Bagian 1-5 (Bundle), Edisi ke-3
Dasar-dasar, Struktur Data, Pengurutan, Pencarian, dan Algoritma Grafik
Struktur Data dan Algoritma dengan Python
oleh Goodrich, Tamassia, Goldwasser
Saya menyukai buku ini. Itu mencakup segalanya dan banyak lagi.
Kode Pythonik
laporan buku saya yang cemerlang: https://startupnextdoor.com/book-report-data-structures-and-algorithms-in-python/
Pilihan Anda:
Goodrich, Tamassia, Goldwasser
Struktur Data dan Algoritma di Java
Sedgewick dan Wayne:
Algoritma I
Algoritma II
Algoritma
Kursus Coursera gratis yang mencakup buku (diajarkan oleh penulis!):
Pilihan Anda:
Goodrich, Tamassia, dan Gunung
Struktur Data dan Algoritma dalam C++, Edisi ke-2
Sedgewick dan Wayne
Algoritma dalam C++, Bagian 1-4: Dasar-dasar, Struktur Data, Penyortiran, Pencarian
Algoritma dalam C++ Bagian 5: Algoritma Grafik
⬆ kembali ke atas
Anda tidak perlu membeli banyak ini. Sejujurnya, "Memecahkan Wawancara Coding" mungkin sudah cukup, tetapi saya membeli lebih banyak untuk memberi diri saya lebih banyak latihan. Tapi saya selalu melakukan terlalu banyak.
Saya membeli keduanya. Mereka memberi saya banyak latihan.
Pemrograman Wawancara Terkena: Mengkodekan Jalan Anda Melalui Wawancara, Edisi ke-4
Jawaban dalam C++ dan Java
Ini adalah pemanasan yang bagus untuk Cracking the Coding Interview
Tidak terlalu sulit. Kebanyakan masalah mungkin lebih mudah daripada apa yang Anda lihat dalam wawancara (dari apa yang saya baca)
Memecahkan Wawancara Coding, Edisi ke-6
jawaban di Jawa
Pilih salah satu:
Elemen Wawancara Pemrograman (versi C++)
Elemen Pemrograman Wawancara dengan Python
Elemen Wawancara Pemrograman (versi Java) - Proyek Pendamping - Metode Stub dan Kasus Uji untuk Setiap Masalah dalam Buku
⬆ kembali ke atas
Daftar ini bertambah selama berbulan-bulan, dan ya, menjadi tidak terkendali.
Berikut adalah beberapa kesalahan yang saya buat sehingga Anda akan mendapatkan pengalaman yang lebih baik. Dan Anda akan menghemat waktu berbulan-bulan.
Saya menonton video selama berjam-jam dan membuat banyak catatan, dan berbulan-bulan kemudian ada banyak hal yang tidak saya ingat. Saya menghabiskan 3 hari membaca catatan dan membuat kartu flash, sehingga saya bisa mengulasnya. Saya tidak membutuhkan semua pengetahuan itu.
Silakan baca agar Anda tidak membuat kesalahan saya:
Mempertahankan Pengetahuan Ilmu Komputer.
Untuk mengatasi masalah ini, saya membuat situs kartu flash kecil di mana saya dapat menambahkan 2 jenis kartu flash: umum dan kode. Setiap kartu memiliki format yang berbeda. Saya membuat situs web yang mengutamakan seluler, sehingga saya dapat mengulasnya di ponsel atau tablet saya, di mana pun saya berada.
Buat sendiri secara gratis:
Repo situs kartu flash
SAYA TIDAK MEREKOMENDASIKAN menggunakan kartu flash saya. Terlalu banyak dan kebanyakan adalah hal-hal sepele yang tidak Anda perlukan.
Namun jika Anda tidak ingin mendengarkan saya, ini dia:
Basis data kartu flash saya (1200 kartu):
Basis data kartu flash saya (ekstrim - 1800 kartu):
Ingatlah bahwa saya berlebihan dan memiliki kartu yang mencakup segala hal mulai dari bahasa assembly dan hal-hal sepele Python hingga pembelajaran mesin dan statistik. Itu terlalu banyak untuk apa yang dibutuhkan.
Catatan pada kartu flash: Pertama kali Anda mengenali bahwa Anda mengetahui jawabannya, jangan tandai sebagai diketahui. Anda harus melihat kartu yang sama dan menjawabnya beberapa kali dengan benar sebelum Anda benar-benar mengetahuinya. Pengulangan akan menempatkan pengetahuan itu lebih dalam di otak Anda.
Alternatif untuk menggunakan situs flashcard saya adalah Anki, yang telah berkali-kali direkomendasikan kepada saya. Ini menggunakan sistem pengulangan untuk membantu Anda mengingat. Mudah digunakan, tersedia di semua platform, dan memiliki sistem sinkronisasi cloud. Biayanya $25 di iOS tetapi gratis di platform lain.
Database flashcard saya dalam format Anki: https://ankiweb.net/shared/info/25173560 (terima kasih @xiewenya).
Beberapa siswa telah menyebutkan masalah pemformatan dengan spasi yang dapat diperbaiki dengan melakukan hal berikut: buka dek, edit kartu, klik kartu, pilih tombol radio "penataan gaya", dan tambahkan anggota "spasi putih: pra;" ke kelas kartu.
INI SANGAT PENTING.
Mulailah mengerjakan pertanyaan wawancara pengkodean saat Anda mempelajari struktur data dan algoritma.
Anda perlu menerapkan apa yang Anda pelajari untuk memecahkan masalah, atau Anda akan lupa. Saya membuat kesalahan ini.
Setelah Anda mempelajari suatu topik, dan merasa nyaman dengan topik tersebut, misalnya, daftar tertaut :
Buka salah satu buku wawancara coding (atau situs web masalah coding, tercantum di bawah)
Kerjakan 2 atau 3 pertanyaan mengenai daftar tertaut.
Lanjut ke topik pembelajaran berikutnya.
Nanti, kembali dan kerjakan 2 atau 3 soal daftar tertaut lainnya.
Lakukan ini dengan setiap topik baru yang Anda pelajari.
Teruslah mengerjakan soal saat Anda mempelajari semua hal ini, bukan setelahnya.
Anda dipekerjakan bukan karena pengetahuan, tetapi bagaimana Anda menerapkan pengetahuan tersebut.
Ada banyak sumber daya untuk ini, tercantum di bawah. Terus berlanjut.
Ada banyak gangguan yang dapat menyita waktu berharga. Fokus dan konsentrasi itu sulit. Nyalakan musik tanpa lirik dan Anda akan dapat fokus dengan cukup baik.
⬆ kembali ke atas
Ini adalah teknologi yang lazim tetapi bukan bagian dari rencana studi ini:
skrip java
HTML, CSS, dan teknologi front-end lainnya
SQL
⬆ kembali ke atas
Kursus ini membahas banyak mata pelajaran. Masing-masing mungkin akan memakan waktu beberapa hari, atau bahkan seminggu atau lebih. Itu tergantung pada jadwal Anda.
Setiap hari, ambil mata pelajaran berikutnya dalam daftar, tonton beberapa video tentang mata pelajaran tersebut, lalu tulis implementasi struktur data atau algoritme tersebut dalam bahasa yang Anda pilih untuk kursus ini.
Anda dapat melihat kode saya di sini:
C
C++
ular piton
Anda tidak perlu menghafal setiap algoritma. Anda hanya perlu cukup memahaminya untuk bisa menulis implementasi Anda sendiri.
⬆ kembali ke atas
Why is this here? I'm not ready to interview.
Kemudian kembali dan baca ini.
Mengapa Anda perlu berlatih mengerjakan soal pemrograman:
Pengenalan masalah, dan kesesuaian struktur data serta algoritma yang tepat
Mengumpulkan persyaratan untuk masalah tersebut
Bicarakan masalah Anda seperti yang Anda lakukan saat wawancara
Pengkodean dilakukan di papan tulis atau kertas, bukan di komputer
Menghadirkan kompleksitas waktu dan ruang untuk solusi Anda (lihat Big-O di bawah)
Menguji solusi Anda
Ada pengantar yang bagus untuk pemecahan masalah yang metodis dan komunikatif dalam sebuah wawancara. Anda juga akan mendapatkan ini dari buku wawancara pemrograman, tetapi menurut saya ini luar biasa: Kanvas desain algoritma
Tulis kode di papan tulis atau kertas, bukan di komputer. Uji dengan beberapa contoh masukan. Kemudian ketik dan uji di komputer.
Jika Anda tidak memiliki papan tulis di rumah, belilah papan gambar besar dari toko seni. Anda bisa duduk di sofa dan berlatih. Ini adalah "papan tulis sofa" saya. Saya menambahkan pena di foto hanya untuk skala. Jika Anda menggunakan pena, Anda pasti berharap bisa menghapusnya. Menjadi berantakan dengan cepat. Saya menggunakan pensil dan penghapus.
Latihan coding soal bukan tentang menghafal jawaban soal pemrograman.
⬆ kembali ke atas
Jangan lupa buku wawancara pengkodean kunci Anda di sini.
Memecahkan Masalah:
Bagaimana Menemukan Solusi
Cara Membedah Pernyataan Masalah Topcoder
Video Pertanyaan Wawancara Coding:
Saya layak (88 video)
Tushar Roy (5 daftar putar)
Super untuk panduan solusi masalah
Nick White - Solusi LeetCode (187 Video)
Penjelasan yang bagus tentang solusi dan kodenya
Anda dapat menonton beberapa dalam waktu singkat
FisherCoder - Solusi LeetCode
Situs Tantangan/Latihan:
Kode Leet
Situs masalah coding favorit saya. Ini sepadan dengan uang berlangganan untuk 1-2 bulan yang mungkin Anda persiapkan.
Lihat Video Nick White dan FisherCoder di atas untuk panduan kode.
Peringkat Peretas
Pembuat Kode Teratas
Kekuatan kode
Kesopanan
Geeks untuk Geeks
Ahli Algo
Dibuat oleh para insinyur Google, ini juga merupakan sumber yang bagus untuk mengasah keterampilan Anda.
Proyek Euler
sangat berfokus pada matematika, dan tidak terlalu cocok untuk wawancara coding
⬆ kembali ke atas
Baiklah, cukup bicaranya, mari belajar!
Namun jangan lupa mengerjakan soal coding dari atas sambil belajar!
Tidak ada yang bisa diterapkan di sini, Anda hanya menonton video dan membuat catatan! Hore!
Ada banyak video di sini. Tonton saja secukupnya sampai kalian memahaminya. Anda selalu dapat kembali dan mengulas.
Jangan khawatir jika Anda tidak memahami semua matematika di baliknya.
Anda hanya perlu memahami cara mengekspresikan kompleksitas suatu algoritma dalam bentuk Big-O.
Harvard CS50 - Notasi Asimptotik (video)
Notasi O Besar (tutorial singkat umum) (video)
Notasi O Besar (dan Omega dan Theta) - penjelasan matematika terbaik (video)
Skiena (video)
UC Berkeley Big O (video)
Analisis Diamortisasi (video)
TopCoder (termasuk relasi perulangan dan teorema master):
Kompleksitas Komputasi: Bagian 1
Kompleksitas Komputasi: Bagian 2
Lembar contekan
[Review] Menganalisis Algoritma (playlist) dalam 18 menit (video)
Yah, itu sudah cukup.
Saat Anda mempelajari "Cracking the Coding Interview", ada bab tentang ini, dan di bagian akhir ada kuis untuk melihat apakah Anda dapat mengidentifikasi kompleksitas runtime dari berbagai algoritma. Ini adalah ulasan dan tes yang super.
⬆ kembali ke atas
berdekatan dalam memori, sehingga kedekatan membantu kinerja
ruang yang dibutuhkan = (kapasitas array, yaitu >= n) * ukuran item, tetapi meskipun 2n, tetap O(n)
O(1) untuk menambah/menghapus di akhir (diamortisasi untuk alokasi ruang lebih banyak), indeks, atau pembaruan
O(n) untuk menyisipkan/menghapus di tempat lain
Berlatih coding menggunakan array dan pointer, dan matematika pointer untuk melompat ke indeks daripada menggunakan pengindeksan.
Array data mentah baru dengan memori yang dialokasikan
ukuran() - jumlah item
capacity() - jumlah item yang dapat ditampungnya
is_empty()
at(index) - mengembalikan item pada indeks tertentu, meledak jika indeks di luar batas
mendorong(barang)
insert(index, item) - menyisipkan item pada indeks, menggeser nilai indeks dan elemen tambahan ke kanan
prepend(item) - dapat menggunakan sisipan di atas pada indeks 0
pop() - hapus dari akhir, kembalikan nilai
delete(index) - menghapus item pada indeks, menggeser semua elemen tambahan ke kiri
hapus (item) - mencari nilai dan menghapus indeks yang menyimpannya (meskipun di banyak tempat)
find(item) - mencari nilai dan mengembalikan indeks pertama dengan nilai tersebut, -1 jika tidak ditemukan
ubah ukuran(kapasitas_baru) // fungsi pribadi
dapat mengalokasikan array int di bawah tenda, hanya saja tidak menggunakan fitur-fiturnya
mulai dengan 16, atau jika angka awalnya lebih besar, gunakan pangkat 2 - 16, 32, 64, 128
ketika Anda mencapai kapasitas, ubah ukurannya menjadi dua kali lipat ukurannya
saat mengeluarkan item, jika ukurannya 1/4 dari kapasitas, ubah ukurannya menjadi setengah
Array CS50 Universitas Harvard
Array (video)
UC Berkeley CS61B - Array Linear dan Multi-Dim (video) (Mulai menonton dari 15m 32s)
Array Dinamis (video)
Array Bergerigi (video)
Tentang Array:
Menerapkan vektor (array yang dapat diubah dengan pengubahan ukuran otomatis):
Waktu
Ruang angkasa
Deskripsi (video)
Tidak perlu diterapkan
size() - mengembalikan jumlah elemen data dalam daftar
kosong() - bool mengembalikan nilai true jika kosong
value_at(index) - mengembalikan nilai item ke-n (mulai dari 0 untuk yang pertama)
push_front(value) - menambahkan item ke depan daftar
pop_front() - menghapus item depan dan mengembalikan nilainya
push_back(value) - menambahkan item di akhir
pop_back() - menghapus item akhir dan mengembalikan nilainya
front() - dapatkan nilai item depan
back() - dapatkan nilai item akhir
insert(index, value) - memasukkan nilai pada indeks, sehingga item saat ini pada indeks tersebut ditunjuk oleh item baru pada indeks
delete(index) - menghapus node pada indeks tertentu
value_n_from_end(n) - mengembalikan nilai node pada posisi ke-n dari akhir daftar
reverse() - membalikkan daftar
hapus_nilai(nilai) - menghapus item pertama dalam daftar dengan nilai ini
Pointer ke Pointer
Daftar Tertaut Inti Vs Array (video)
Di Dunia Nyata Daftar Tertaut Vs Array (video)
Daftar Tertaut CS50 Universitas Harvard - ini membangun intuisi.
Daftar Tertaut Tunggal (video)
CS 61B - Daftar Tertaut 1 (video)
CS 61B - Daftar Tertaut 2 (video)
[Ulasan] Daftar tertaut dalam 4 menit (video)
Keterangan:
Kode C (video) - bukan keseluruhan video, hanya sebagian tentang struktur Node dan alokasi memori
Daftar Tertaut vs Array:
Mengapa Anda harus menghindari daftar tertaut (video)
Gotcha: Anda memerlukan pengetahuan pointer ke pointer: (untuk saat Anda meneruskan pointer ke fungsi yang dapat mengubah alamat di mana pointer itu menunjuk) Halaman ini hanya untuk memahami ptr ke ptr. Saya tidak merekomendasikan gaya traversal daftar ini. Keterbacaan dan pemeliharaan menderita karena kepintaran.
Implementasikan (saya melakukannya dengan penunjuk ekor & tanpa):
Daftar tertaut ganda
Tumpukan (video)
[Ulasan] Tumpukan dalam 3 menit (video)
Tidak akan menerapkan. Menerapkan dengan array itu sepele
implementasi yang buruk menggunakan daftar tertaut di mana Anda enqueue di bagian kepala dan dequeue di bagian ekor akan menjadi O(n) karena Anda memerlukan elemen berikutnya hingga terakhir, menyebabkan traversal penuh dari setiap dequeue
enqueue: O(1) (diamortisasi, daftar tertaut dan larik [probing])
dequeue: O(1) (daftar tertaut dan array)
kosong: O(1) (daftar tertaut dan larik)
enqueue(value) - menambahkan item di akhir penyimpanan yang tersedia
dequeue() - mengembalikan nilai dan menghapus elemen yang paling baru ditambahkan
kosong()
penuh()
enqueue(value) - menambah nilai pada posisi di bagian ekor
dequeue() - mengembalikan nilai dan menghapus elemen yang paling baru ditambahkan (depan)
kosong()
Antrian (video)
Penyangga melingkar/FIFO
[Review] Antrian dalam 3 menit (video)
Implementasikan menggunakan daftar tertaut, dengan penunjuk ekor:
Implementasikan menggunakan array berukuran tetap:
Biaya:
hash(k, m) - m adalah ukuran tabel hash
add(key, value) - jika kunci sudah ada, perbarui nilai
ada (kunci)
dapatkan (kunci)
hapus (kunci)
Tabel Hash Inti (video)
Struktur Data (video)
Masalah Buku Telepon (video)
tabel hash terdistribusi:
Unggah Instan Dan Optimasi Penyimpanan Di Dropbox (video)
Tabel Hash Terdistribusi (video)
Hashing dengan Chaining (video)
Penggandaan Tabel, Karp-Rabin (video)
Pengalamatan Terbuka, Hashing Kriptografi (video)
PyCon 2010: Kamus Perkasa (video)
PyCon 2017: Kamus Lebih Perkasa (video)
(Lanjutan) Pengacakan: Hashing Universal & Sempurna (video)
(Lanjutan) Hashing sempurna (video)
[Ulasan] Tabel hash dalam 4 menit (video)
Video:
Kursus Daring:
Implementasikan dengan array menggunakan probing linier
⬆ kembali ke atas
pencarian biner (pada array bilangan bulat yang diurutkan)
pencarian biner menggunakan rekursi
Pencarian Biner (video)
Pencarian Biner (video)
detail
cetak biru
[Ulasan] Pencarian biner dalam 4 menit (video)
Melaksanakan:
Bilangan Bulat Mutlak
Menukar
4 cara menghitung bit dalam satu byte (video)
Hitung Bit
Cara Menghitung Jumlah Bit Set Dalam Integer 32 Bit
Biner: Kelebihan & Kekurangan (Mengapa Kami Menggunakan Komplemen Dua) (video)
Komplemen 1s
Komplemen 2s
kata-kata
Intro yang bagus: Manipulasi Bit (video)
Tutorial Pemrograman C 2-10: Operator Bitwise (video)
Manipulasi Bit
Operasi Bitwise
peretasan bit
Si Pengembara Kecil
Bit Twiddler Interaktif
Peretasan Bit (video)
Praktek Operasi
Anda harus mengetahui banyak pangkat 2 dari (2^1 hingga 2^16 dan 2^32)
Lembar contekan bit
Dapatkan pemahaman yang baik tentang memanipulasi bit dengan: &, |, ^, ~, >>, <<
komplemen 2s dan 1s
Hitung bit yang disetel
Tukar nilai:
Nilai mutlak:
⬆ kembali ke atas
Catatan BFS:
Catatan DFS:
urutan tingkat (BFS, menggunakan antrian)
kompleksitas waktu: O(n)
kompleksitas ruang: terbaik: O(1), terburuk: O(n/2)=O(n)
kompleksitas waktu: O(n)
kompleksitas ruang: terbaik: O(log n) - rata-rata. tinggi pohon terburuk: O(n)
inorder (DFS: kiri, mandiri, kanan)
postorder (DFS: kiri, kanan, mandiri)
praorder (DFS: mandiri, kiri, kanan)
Pengantar Pohon (video)
Penjelajahan Pohon (video)
BFS (penelusuran pertama luasnya) dan DFS (penelusuran pertama mendalam) (video)
[Ulasan] Penelusuran pertama dalam 4 menit (video)
[Ulasan] Pencarian mendalam pertama dalam 4 menit (video)
[Review] Tree Traversal (playlist) dalam 11 menit (video)
masukkan // masukkan nilai ke dalam pohon
get_node_count // dapatkan jumlah nilai yang disimpan
print_values // mencetak nilai di pohon, dari min hingga maks
hapus_pohon
is_in_tree // mengembalikan nilai benar jika nilai tertentu ada di pohon
get_height // mengembalikan tinggi dalam node (tinggi node tunggal adalah 1)
get_min // mengembalikan nilai minimum yang disimpan di pohon
get_max // mengembalikan nilai maksimum yang disimpan di pohon
is_binary_search_tree
hapus_nilai
get_successor // mengembalikan nilai tertinggi berikutnya di pohon setelah nilai yang diberikan, -1 jika tidak ada
Pohon pencarian biner - Implementasi dalam C/C++ (video)
Implementasi BST - alokasi memori dalam tumpukan dan heap (video)
Temukan elemen min dan maks di pohon pencarian biner (video)
Temukan ketinggian pohon biner (video)
Penjelajahan pohon biner - strategi yang mengutamakan luas dan mendalam (video)
Pohon biner: Level Order Traversal (video)
Traversal pohon biner: Preorder, Inorder, Postorder (video)
Periksa apakah pohon biner adalah pohon pencarian biner atau bukan (video)
Hapus node dari Pohon Pencarian Biner (video)
Inorder Successor dalam pohon pencarian biner (video)
Tinjauan Pohon Pencarian Biner (video)
Pendahuluan (video)
MIT (video)
C/C++:
Melaksanakan:
menyisipkan
sift_up - diperlukan untuk menyisipkan
get_max - mengembalikan item maksimal, tanpa menghapusnya
get_size() - mengembalikan jumlah elemen yang disimpan
is_empty() - mengembalikan nilai true jika heap tidak berisi elemen
ekstrak_max - mengembalikan item maksimal, menghapusnya
sift_down - diperlukan untuk ekstrak_max
hapus(x) - menghapus item di indeks x
heapify - membuat heap dari array elemen, diperlukan untuk heap_sort
heap_sort() - ambil array yang tidak disortir dan ubah menjadi array yang diurutkan menggunakan max heap atau min heap
divisualisasikan sebagai pohon, tetapi biasanya penyimpanannya linier (array, daftar tertaut)
Tumpukan
Pendahuluan (video)
Pohon Biner (video)
Keterangan Ketinggian Pohon (video)
Operasi Dasar (video)
Pohon Biner Lengkap (video)
Kodesemu (video)
Sortir Tumpukan - melompat untuk memulai (video)
Sortir Tumpukan (video)
Membangun tumpukan (video)
MIT 6.006 Pengantar Algoritma: Tumpukan Biner
CS 61B Kuliah 24: Antrian Prioritas (video)
BuildHeap Waktu Linier (max-heap)
[Ulasan] Heap (daftar putar) dalam 13 menit (video)
Menerapkan tumpukan maksimal:
⬆ kembali ke atas
Catatan:
Saya tidak akan merekomendasikan pengurutan daftar tertaut, tetapi pengurutan gabungan bisa dilakukan.
Gabungkan Sortir Untuk Daftar Tertaut
Stabilitas Algoritma Penyortiran
Stabilitas Dalam Algoritma Penyortiran
Stabilitas Dalam Algoritma Penyortiran
Algoritma Penyortiran - Stabilitas
tidak ada bubble sort - buruk - O(n^2), kecuali jika n <= 16
Terapkan pengurutan & ketahui kasus terbaik/kasus terburuk, kompleksitas rata-rata masing-masing:
Stabilitas dalam algoritma pengurutan ("Apakah Quicksort stabil?")
Algoritme mana yang dapat digunakan pada daftar tertaut? Yang mana di array? Yang mana dari keduanya?
Untuk heapsort, lihat struktur data Heap di atas. Penyortiran heap bagus, tetapi tidak stabil
Sedgewick - Penggabungan (5 video)
1. Penggabungan
2. Penggabungan dari bawah ke atas
3. Kompleksitas Penyortiran
4. Pembanding
5. Stabilitas
Sedgewick - Quicksort (4 video)
1. Sortir cepat
2. Seleksi
3. Kunci Duplikat
4. Penyortiran Sistem
UC Berkeley:
CS 61B Kuliah 29 : Penyortiran I (video)
CS 61B Kuliah 30: Penyortiran II (video)
CS 61B Kuliah 32 : Penyortiran III (video)
CS 61B Kuliah 33 : Penyortiran V (video)
CS 61B 21-04-2014: Pengurutan Radix (video)
Sortir Gelembung (video)
Menganalisis Bubble Sort (video)
Sortir Penyisipan, Sortir Gabungan (video)
Sortir Penyisipan (video)
Gabungkan Sortir (video)
Sortir cepat (video)
Sortir Seleksi (video)
Gabungkan kode pengurutan:
Menggunakan larik keluaran (C)
Menggunakan array keluaran (Python)
Di tempat (C++)
Kode pengurutan cepat:
Implementasi (C)
Implementasi (C)
Implementasi (Python)
[Review] Penyortiran (playlist) dalam 18 menit
Penyortiran cepat dalam 4 menit (video)
Penyortiran tumpukan dalam 4 menit (video)
Gabungkan pengurutan dalam 3 menit (video)
Penyortiran gelembung dalam 2 menit (video)
Sortir pilihan dalam 3 menit (video)
Penyortiran penyisipan dalam 2 menit (video)
Melaksanakan:
Mergesort: O(n log n) rata-rata dan terburuk