Algoritmaları ve veri yapılarını nasıl öğrenirim? [kapalı]


38

Bu benim sorduğum soruyu devam ettiriyor, burada sorulan algoritmalar ve veri yapılarını öğrenmek gerekli. Evet öyle hissediyorum.

Şimdi, deneyerek ya da pratik olarak ya da herhangi bir ödevle öğrenme fırsatı bulamayacağım bir ortamda çalışıyorum. Algoritmaları ve veri yapılarını öğrenmek için doğru kitaplar, doğru problemler, altı ay veya bir veya iki ay verebileceğim doğru kaynaklar gibi doğru yaklaşım nedir? Ayrıca aklımı, sorunları veri yapıları ve algoritmalarla ilişkilendirebilecek şekilde biçimlendirin.


3
Cormen senin arkadaşın :)
Lukasz Madon

1
@ lukas: Yine de hala bitmedi, orada o kadar da rahat olmadığım bir sürü matematik var. O da başka tek kaynak :) gerçi, algoritmalar, veri yapıları ve bunların analizi bildiğim kadarıyla çok daha yaptılar
Matthieu M.

Ayrıca popüler algoritmaları ve veri yapılarını wikipedia'dan daha basit bir şekilde tanımlayan ve hemen hemen her makale için (kod, yaklaşım, algoritma) popüler kodları içeren projemi
deneyebilirsiniz

Yanıtlar:


40

Okuyun.

Hayır, gerçekten oku.

Algoritma ve tasarım hakkında bulabileceğiniz her şeyi okuyun. Dışarıda olağanüstü kitaplar var. Sedgewick algoritması kitapları iyi. Skiena Algoritması Tasarım El Kitabı da iyidir. Birlikte bu kitaplar, Efsanevi Adam Ayı ile birlikte gittiğim her işte, her kitap rafında beni takip ediyor.

O zaman sor.

Saygı duyduğun insanlarla konuş. Onlara hangi karar puanları olduğunu ve neden aldıkları kararları verdiklerini sorun. İyi olanlar her zaman size şunu söyleyecektir: "X yapmayı seçtim çünkü bu şekilde A, B'den daha iyidir. C ile gidebilirdim, ama bunun bunun için daha iyi bir seçim olduğunu hissettim".

Sonra, yap.

Bir şeyler yap. Asla kullanmayacağın şeyler yap. Asla ihtiyacınız olmayacak şeyler oluşturun. Sudoku bulmacasını çözen bir program yaz. Şimdi git ve tekrar yap. Ve yeniden. Tamamen 5 farklı şekilde oluşturun. Sudoku bulmacaları üreten bir program oluşturun ve bunları çözücülere besleyin. Hangi çözücünün en hızlı olduğunu bulun. Ve sonra...

Neden olduğunu bul.

"Ne" neredeyse hiç önemli değil. Demek istediğim, evet, projeyi elde bitirmek için kritik öneme sahip, ancak sonunda "neyi" bilmeden "neyi" biliyorsanız, o zaman asla başaramazsınız. Özgeçmişinde kurşun işareti var. Git bir kurabiye al ve kendini tebrik et. “Neden” “ne” den çok daha önemlidir.

Ve Sudoku kaydı için bir örnek oldu. Kongregate'de bir ton mantık bulmacası ile bu alıştırmayı yapmak için çok boş zaman geçirdim ve yolda çok şey öğrendim.

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/


Gerçekten gerçekten iyi cevap! Tavsiyenizi ifade etme şeklinizi seviyorum!
paxRoman

Ayrıca her yere Sedgewick ve Skienna kitaplarını da yanımda götürüyorum! Bu muhtemelen cevabını sevmemin başka bir nedeni!
paxRoman

ve Cormen karışıma lütfen.
AruniRC

1
İnternet hakkındaki bilgiye sürekli artan bir sürücü çağında, şunu eklemek önemlidir: kitap okumak (yalnızca tabii ki değil). Reklamla ayrılmış 2-3 sayfadan uzun HTML sayfalarından daha uzun bir konuya tutarlı ve tutarlı bir giriş A Good Thing ™ ! Bunu hafife almayın (ve evet, elbette e-kitaplar iyi).
Joachim Sauer

1
Kabul. Tutarlılık anahtarıdır. Bir düzine farklı kaynaktan bir veya iki tane alırken veri yapılarını zorlaştırmak zordur. Kitaplar ayrıca daha iyi diyagramlara sahip olma eğilimindedir (bazı bloglar / çevrimiçi kaynaklar yapar, ancak genelleme kitapları daha iyidir). Sedgewick kitapları kod ve açıklamaları takip etmek için basit, özellikle iyi bir grafik karışımına sahiptir.
Hounshell

10

Algoritmalar

On iki yaşındayken bir grup ortamında sihir dersleri aldım. Sihirbazın adı Joe Carota idi. Bir keresinde bir numara yaptı ve ben "Bunu nasıl yaptın?" Diye bulanıkladım. O günden beri bana yapışmış bir şey söyledi.

Joe'nun cevabı, "Michael, bu hilenin nasıl yapıldığını gerçekten bilmek istiyorsan, nasıl yapabileceğini bulmalısın."

Tabii ki duymak istediğim bu değildi ama aklımı problem çözme üzerine yoğunlaştırdı. Bu benim bakış açımdan problem çözmekti. Sorunu çözme konusundaki ilk girişimim on yedi adım attıysa ve gerçekten klunky olsaydı, iyi haberi sorunu çözdüm.

Sonra geliştirdiğim çözüme bakarak bu çözümü geliştirmenin yollarını aradım ve sonuçların nasıl modernleştirileceğini öğrenecektim. Daha sonra bilgisayar programlama ömrümde bu işlemin "Kademeli İyileştirme" olarak adlandırıldığını öğrendim. Sanırım bugün buna refactoring diyorlar.

İşe yaradı ve şimdi hala çalışıyor.




2

Bununla ilgili bir kursa katılmazsanız, Algoritma Tasarım Kılavuzu'nu öneririm. Burada ücretsiz bir PDF var , ancak profesyonelce programlama yapmayı planlıyorsanız gerçek kitabı almaya değer.


Çözümler burada. Kendi başınıza öğrenirken onları edinmenin
David

1

Veri yapıları ve algoritmalarında lisans düzeyinde bir kursa kaydolmaya çalışın, bu kavramları başkaları yanında öğrenmek her zaman iyidir.


Bilgisayar bilimi mezunuyum ve o zamandan beri altı yıl oldu. Bu konuya hiç odaklanmamıştım, orada web, kullanılabilirlik, müşteri sunucusu vardı, beni cezbediyordu ve sadece bu alanlarda çalışıyorum ama şimdi onları da öğrenmem gerektiğini hissediyorum. Düşünceleriniz nelerdir.
sushil bharwani

Geri dönün ve bir tazeleme kursu :-) almak
Martijn Verburg

1

Örneğin , çevrimiçi alanda klasik problemleri çözmek için çalışmaya başlayın , site çok şık görünmeyebilir, fakat çocuk, bunlar günümüzde kullanılan önemli veri yapılarının ve algoritmaların çoğunu gerektiren klasik programlama problemleridir.

Çözümler, C / C ++ 'dan JavaScript, Lisp, Smalltalk, assembler + bazı 40 daha fazlasına kadar çeşitli programlama dillerinde gönderilebilir. Böylece problemi, hangi programlama dili ile rahat hissettiğinizle çözmeye odaklanabilirsiniz.


1

CLRS

Bu benim en sevdiğim kaynak. Lisans bilgisayar bilimleri algoritmaları kursunda kullandım ve 4 yıl sonra MS Comp Sci kurslarına hazırlanmak için kendi başıma okumak için kitabı satın aldım. Herhangi bir yöntemle okumak kolay değildir, ancak sunulan matematik / ispatların bazılarını anlamaya çalışırsanız ve sözde kodu en sevdiğiniz dil (ler) inizde uygularsanız, biraz fiyat etiketine değecektir. Diğerlerinin belirttiği Algoritma Tasarım El Kitabı da problem tanımlamayı öğrenmek için harika bir kaynaktır ancak CLRS'nin saf detay için daha iyi olduğunu gördüm.


0

Her zaman böyle bir şey deneyebilirsiniz: http://codekata.pragprog.com/

Okumaya karşı düşünerek her zaman daha iyi öğrendim. Ancak, cevapları bulmak için dokümantasyon / okuma materyallerine sahip olmalısınız.


0

Bu kitabı satın al, Bunu kredi veya Steal! Gerisi takip edecek :)

Perçin ve Cormen'den Algoritmalara Giriş. Giriş bölümündeki Mergesort açıklamasını geçtikten sonra ilk başta takip etmek çok zor olacaktır. Her şey sana güzelce açılıyor.

Ayrıca, kitapta verilen problemleri çözerseniz daha da iyi olursunuz. Liseden mezun olduktan sonra bile kitaptan ayrılmak istemedim. Bu o kadar iyi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.