Bir geliştirici hangi algoritmaları ve veri yapılarını kesinlikle bilmelidir? [kapalı]


24

Başarılı bir kurumsal Java geliştiricisi olmak istiyorum. Hangi algoritmalarla ve veri yapılarıyla iyi bir şekilde bilgilendirilmeliyim? Bana hangi kitapları önerirsiniz?

Başarılı bir Java geliştiricisi olmak için CLRS'de verilenler gibi tüm gelişmiş algoritmaları bilmem gerekir mi?

Önceliklerinin azalan düzeninde öğrenmem gereken konuların bir listesini önerebilir misiniz?

Bilmem gerekir mi:

  • Aramak?
  • Sıralama?
  • Grafikler / Ağaçlar?

vb?


1
@jonsca: Bağlı kuruluş pazarlaması ah? ;)
Chankey Pathak 21:11

Hayır, SE, bağlantıyı bu şekilde değiştirir, ama ben sadece herkesin bu baş harfleri bilmediğini anladım :)
jonsca

Yanıtlar:


17

Cormen'in Algoritmalara Giriş, bazı temel teorik temeller için iyi bir kitaptır.

Bununla birlikte, çoğu algoritma ve veri yapısı zaten diğerleri tarafından kodlanmış, test edilmiş ve optimize edilmiştir ve bunları bir kez daha uygulamak için hiçbir neden yoktur. Başarılı bir Java geliştiricisi olmak için, derlemedeki Koleksiyonlar Çerçevesini bilmeniz gerekir .


3
Bununla birlikte, algoritmalara dahil olan maliyetleri de bilmeniz gerekir: örneğin, genişlik birinci araması, potansiyel olarak çok fazla alan kullanırken en kısa yolu bulacaktır.
Frank Shearar

Anlaşılan, sadece büyük O gösterim ruhunu elde etmekle birlikte uzun bir yol gidiyor.
Joonas Pulakka 12:10

8

Herhangi bir tür programcı olmak istiyorsanız, tüm temel veri yapılarını (yığınlar, sıralar, diziler, bağlantılı listeler, karma tablolar, ağaçlar vb.) Ayrıntılı olarak anlamanız gerekir. En azından, sizin için işi yapacak koleksiyon çerçevelerinin bulunmadığı bir dünyada bulursanız, herhangi birisini kendiniz için uygulayabilmeniz için yeterli.

Algoritmalar ile ilgili olarak, bana işler için daha fazla araç olduğu anlaşılıyor, oysa veri yapılarınız temel yapı taşları. Karşılaştığınız her algoritmanın nasıl uygulanacağının ayrıntılarını bilmek kadar önemli olduğunu sanmıyorum. Yapmanız gereken, bir algoritmanın belirli bir amaç için ne kadar iyi çalışacağını değerlendirmektir. Bazen derinlik birinci ve geniş birinci birinci arama veya verileriniz üzerinde yaptığınız sıralama türü arasındaki fark, kodunuzun performansı veya genel başarısı için çok büyük bir fark yaratabilir, bu yüzden bunun nasıl değerlendirileceğini bilmek çok önemlidir.


0

Diğer cevaplara ek olarak, algoritmaların çalışmasının sadece iyi bilinen teknikler hakkında bilgi sahibi olmak için (ki hala önemli olan) değil, aynı zamanda geliştirilmekte olan düşünce sürecini anlayabilmek için olduğunu da eklemek isterim. Gerçek hayatta karşılaştığınız bir problemin çözümü, mutlaka iyi bilinen bir şey değil.


0

Şimdi bir gün Java öğreniyorum.

Başarılı bir işletme geliştiricisi olmak istiyorum. Öyleyse hangi algoritmalarla ve veri yapılarıyla iyi anlaşılmalıyım? Bana hangi kitapları önerirsiniz?

Başarılı bir Java geliştiricisi olmak için CLRS'de verilenler gibi tüm gelişmiş algoritmaları bilmem gerekir mi?

Bana önceliklerinin azalan düzeninde öğrenmem gereken konuların bir listesini önerebilir misiniz?

Bana bilmem gereken bazı konuların adını söyle. Arama, Sıralama, Grafik, Ağaç vb. Gibi?

Programlama becerilerinizi genişletmek ve geliştirmek için istekli olmanız iyidir. Ancak, algoritmaları ezberlemek için bir şeyler kataloğu olarak değerlendirmemek önemlidir. İyi bir geliştirici olmak için bilmeniz gereken şey (Java'da veya bu konuda başka bir şeyde) algoritmik analizi anlamaktır.

Sen belirli bir kaç veri yapılarını ve öğrenme algoritmaları, bu öğrenmek ve zaman ve mekan (bellek) açısından performanslarını analiz öğrenme. Arama, sıralama, grafikler, ağaçlar, yığınlar, yığınlar ve tüm bu iyi şeyler. Bu aynı zamanda bazı hesaplama teorisi ve ayrık matematik teorisinin temellerini takip etmelidir (Java dünyasında asla bu iki konuyu doğrudan kullanamaysak bile - faydaları dolaylıdır.)

Bir programlama dilinin öğrenmesini (sizin durumunuzda Java'da) algoritmik analizin öğrenilmesiyle ayırın (algoritmalar ve veri yapılarının "ezberlemesinden" farklıdır).

George T. Heineman, Gary Pollice ve Stanley Selkow'un "Özetle Algoritmaları" iyi bir başlangıç. Sanjoy Dasgupta, Christos Papadimitriou ve Umesh Vazirani'nin "Algoritmaları" bir başka güzel ders kitabı.

En iyisi algoritmalarda 3000 seviyelik bir kursa başlamadan önce programlamada 9-12 kredilik ders almaktır. Buna rağmen, bahsettiğim iki kitapla kendi kendine çalışma iyi bir alternatif olabilir (kendi kendine çalışma herkes için olmayabilir.)

İyi şanslar!

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.