Bagaimana cara mempelajari algoritma dan struktur data? [Tutup]

38

Ini merupakan kelanjutan dari pertanyaan saya sebelumnya di mana saya bertanya apakah perlu mempelajari algoritma dan struktur data. Saya merasa ya itu.

Sekarang saya bekerja di lingkungan di mana saya tidak akan pernah mendapatkan kesempatan untuk mempelajarinya dengan bereksperimen atau secara praktis atau dalam tugas apa pun. Apa pendekatan yang tepat seperti buku yang tepat, jenis masalah yang tepat, jenis sumber daya yang tepat yang bisa saya lalui untuk memberikan enam atau dua tahun atau dua tahun untuk mempelajari algoritma dan struktur data? Dan juga membentuk pikiran saya sedemikian rupa sehingga dapat menghubungkan masalah dengan struktur data dan algoritma.

sushil bharwani
sumber
3
Cormen adalah teman Anda :)
Lukasz Madon
1
@ Lukas: Masih belum menyelesaikannya, ada beberapa matematika di sana yang saya tidak nyaman dengannya. Itu melakukan jauh lebih banyak untuk pengetahuan saya tentang algoritma, struktur data dan analisis mereka, bahwa sumber tunggal lainnya sekalipun :)
Matthieu M.
Anda juga dapat mencoba proyek saya, yang menggambarkan algoritma populer dan struktur data lebih mudah daripada wikipedia dan berisi kode sumber hampir untuk setiap artikel (struktur, pendekatan, algoritma) ... en.algoritmy.net
malejpavouk

Jawaban:

40

Baca baca.

Tidak, sungguh, baca.

Baca segala sesuatu tentang algoritma dan desain yang dapat Anda temukan. Ada banyak buku fenomenal di luar sana. Buku-buku algoritma Sedgewick bagus. Manual Desain Algoritma oleh Skiena juga bagus. Bersama-sama, buku-buku ini mengikuti saya di setiap rak buku di setiap pekerjaan yang saya kunjungi, bersama dengan The Mythical Man-Month.

Lalu tanyakan.

Berbicaralah dengan orang yang Anda hormati. Tanyakan kepada mereka poin keputusan apa yang mereka miliki dan mengapa mereka membuat keputusan yang mereka lakukan. Yang baik akan selalu bisa memberi tahu Anda, "Saya memilih untuk melakukan X karena lebih baik daripada A, B dengan cara ini. Saya bisa saja menggunakan C, tetapi saya merasa ini adalah pilihan yang lebih baik karena ini".

Selanjutnya, lakukan.

Bangun barang. Bangun barang-barang yang tidak akan pernah Anda gunakan. Bangun barang-barang yang tidak akan Anda butuhkan. Pergi menulis sebuah program yang memecahkan teka-teki Sudoku. Sekarang lakukan lagi. Dan lagi. Buat 5 cara yang sangat berbeda. Bangun sebuah program yang menghasilkan teka-teki Sudoku dan memasukkannya ke dalam solver. Temukan pemecah mana yang tercepat. Lalu...

Cari tahu mengapa.

"Apa" hampir tidak pernah penting. Maksud saya, ya, sangat penting untuk menyelesaikan proyek yang ada, tetapi pada akhirnya jika Anda tahu "apa" tanpa mengetahui "mengapa", maka Anda mungkin tidak pernah melakukannya di tempat pertama. Anda mendapat poin penting di resume Anda. Dapatkan kue dan ucapkan selamat kepada diri sendiri. "Mengapa" jauh lebih penting daripada "apa".

Dan sebagai catatan, Sudoku adalah contoh. Saya menghabiskan banyak waktu luang melalui latihan itu dengan satu ton teka-teki logika tentang Kongregate dan belajar banyak di jalan.

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/

Hounshell
sumber
jawaban yang sangat sangat bagus! Saya suka cara Anda mengucapkan saran Anda!
paxRoman
Saya juga membawa buku Sedgewick dan Skienna ke mana-mana! mungkin itu alasan lain mengapa saya menyukai jawaban Anda!
paxRoman
dan Cormen ke dalam campuran.
AruniRC
1
Dalam era dorongan informasi yang semakin meningkat di internet, penting untuk menambahkan: membaca buku (tidak secara eksklusif, tentu saja). Pengantar yang konsisten dan koheren tentang masalah yang lebih panjang dari 2-3 halaman HTML yang dipisahkan iklan adalah A Good Thing ™ ! Jangan meremehkannya (dan ya, tentu saja ebooks baik-baik saja).
Joachim Sauer
1
Sepakat. Konsistensi adalah kuncinya. Sulit untuk mendapatkan struktur data ketika Anda mendapatkan satu atau dua dari selusin sumber yang berbeda. Buku juga cenderung memiliki diagram yang lebih baik (beberapa blog / sumber online melakukannya, tetapi sebagai buku generalisasi lebih baik). Buku-buku Sedgewick memiliki campuran diagram yang sangat bagus, mudah diikuti kode dan deskripsi.
Hounshell
10

Algoritma

Saya mengambil pelajaran sihir dalam pengaturan kelompok ketika saya berusia dua belas tahun. Nama penyihir itu adalah Joe Carota. Suatu kali dia melakukan trik dan saya berkata, "Bagaimana kamu melakukan itu?" Dia mengatakan sesuatu hari itu yang terus melekat padaku sejak saat itu.

Tanggapan Joe, "Michael, jika Anda benar-benar ingin tahu bagaimana trik itu dilakukan, Anda harus mengetahui bagaimana Anda akan melakukannya sendiri."

Ya tentu saja bukan itu yang ingin saya dengar tetapi itu membuat pikiran saya fokus pada pemecahan masalah. Ini adalah pemecahan masalah dari sudut pandang saya. Jika upaya pertama saya untuk memecahkan masalah itu mengambil tujuh belas langkah dan benar-benar gila, kabar baiknya adalah saya memecahkan masalahnya.

Kemudian dengan melihat solusi yang saya kembangkan dan mencari cara untuk memperbaiki solusi itu saya akan belajar bagaimana merampingkan hasil akhir. Kemudian dalam kehidupan pemrograman komputer saya, saya menemukan bahwa proses ini disebut "Stepwise Refinement". Saya pikir hari ini mereka menyebutnya refactoring.

Berhasil maka masih berfungsi sekarang.

Michael Riley - AKA Gunny
sumber
2

Lihat apakah Anda dapat mengikuti kursus online, atau diajari. Gagal itu, ini muncul dalam pencarian google cepat. Saya baru saja mengambil kelas pada musim semi yang lalu (pertama kali, saya pindah dari EE ke perangkat lunak) dan tidak terlalu sulit untuk mengambilnya jika Anda memahami petunjuk dengan baik.

Stephen Furlani
sumber
2

Jika Anda tidak dapat mengikuti kursus ini, saya akan merekomendasikan The Algorithm Design Manual. Ada PDF gratis di sini , tetapi ada baiknya mendapatkan buku yang sebenarnya jika Anda berencana pemrograman secara profesional.

Jason Baker
sumber
Solusinya ada di sini. Saya merasa senang memiliki mereka ketika belajar sendiri: www2.algorithm.cs.sunysb.edu:8080/mediawiki/index.php/…
David Rinck
1

Cobalah untuk mendaftar dalam kursus tingkat sarjana dalam struktur data dan algoritma, itu selalu baik untuk mempelajari konsep-konsep ini bersama yang lain.

Martijn Verburg
sumber
Saya lulusan dari ilmu komputer dan sudah enam tahun sejak itu. Saya tidak pernah berkonsentrasi pada subjek ini. Ada web, kegunaan, server klien, yang menarik saya dan saya bekerja di bidang ini saja, tetapi sekarang saya merasa saya harus mempelajarinya juga. Apa pendapatmu?
sushil bharwani
Kembali dan ambil kursus penyegaran :-)
Martijn Verburg
1

Mulai bekerja pada pemecahan masalah klasik pada misalnya sphere online , situs mungkin tidak terlihat mewah tetapi bocah, ini adalah masalah pemrograman klasik yang membutuhkan banyak struktur data penting dan algoritma yang digunakan saat ini.

Solusi dapat diajukan dalam berbagai bahasa pemrograman dari C / C ++ ke JavaScript, Lisp, Smalltalk, assembler + 40 lebih. Jadi Anda bisa fokus sepenuhnya pada pemecahan masalah dengan bahasa pemrograman apa pun yang Anda rasa nyaman.

Ernelli
sumber
1

CLRS

Sejauh ini sumber daya favorit saya. Saya menggunakannya dalam kursus algoritma ilmu komputer sarjana saya dan akhirnya membeli buku 4 tahun kemudian untuk membaca sendiri untuk mempersiapkan kursus MS Comp Sci saya. Ini tidak mudah dibaca dengan cara apa pun, tetapi jika Anda bekerja untuk memahami beberapa matematika / bukti yang disajikan dan kemudian menerapkan pseudo-code dalam bahasa favorit Anda, itu sepadan dengan label harga yang lumayan besar. Manual Perancangan Algoritma yang disebutkan orang lain juga merupakan sumber yang bagus untuk mempelajari identifikasi masalah, tetapi saya menemukan CLRS lebih baik untuk detail murni.

Kurtis
sumber
0

Anda selalu dapat mencoba sesuatu seperti ini: http://codekata.pragprog.com/

Saya selalu belajar lebih baik dengan memikirkannya daripada membaca. Namun, Anda harus memiliki dokumentasi / bahan bacaan yang tersedia untuk mencari jawaban.

RobotHumans
sumber
0

Beli buku ini , Pinjam ini atau Curi ini! Sisanya akan mengikuti :)

Pengantar Algoritma oleh Rivest dan Cormen. Akan sangat sulit untuk mengikuti pada awalnya begitu Anda berhasil melewati penjelasan Mergesort dalam pendahuluan. Segalanya tersingkap bagimu dengan indah.

Plus Anda akan menjadi lebih baik jika Anda memecahkan masalah yang diberikan dalam buku ini. Saya tidak pernah benar-benar ingin berpisah dengan buku itu bahkan setelah lulus dari sekolah menengah. Itu bagus.

Venki
sumber