Algoritma Tasarımı ve Karmaşıklığı - Bu şekilde nasıl düşünülür?


15

Sorum genel bir soru: Algoritma Tasarım ve Karmaşıklık açısından düşünmeye nasıl başlayabilirim? Algoritma Tasarımı üzerine Yüksek Lisans Dersi alacağım. Daha önce kayıt olmuştum ama daha sonra bıraktım çünkü yetişemedim. Bu dersi zorunlu olarak almak zorundayım.

Bu şekilde düşünmek için bir 'hile' var mı? Bunun oldukça kabaca koyduğunu biliyorum, ancak bazen taze bir bakış açısı bir konuyu farklı düşünmeye yardımcı olur.

Bu dersle ilgili temel sorun (ve benzer teorik dersler): Geldiğim çözümlerin doğru olduğunu nasıl bilebilirim? Teorik kısmın, özellikle belirli bir algoritmanın belirli bir şekilde 'hareket ettiğini' veya belli bir şekilde davrandığını 'keyfi olarak buluyorum?

Kursumuz standart metni kullanacaktır: CLRS ile Algoritmalara Giriş.

Herhangi bir ders kitabı / site / kitap / vb. bu alanda kendinden emin olmanın bir yolunu bulabilir mi?

Herkese teşekkürler,

Jason Dane


2
Ben de bakmanızı öneririm bu yazı . Özellikle Udi Manber'in kitabını öneriyorum.
MS Dousti

1
StackOverflow hakkındaki bu tartışma birkaç öneri sunmaktadır: stackoverflow.com/questions/2256721/…
Jeffε

2
Manber önerisini ikinci olarak aldım. Ayrıca Jeff Edmonds tarafından Algoritmalar Nasıl
Düşünülür

"Geldiğim çözümlerin doğru olduğunu nasıl bilebilirim?" Şunu mu demek istediniz: (1) bir algoritma buldunuz ancak doğru olduğunu nasıl kanıtlayacağınızı bilmiyor musunuz, yoksa (2) bir kanıtınız var ama doğru olup olmadığından emin değil misiniz?
Jukka Suomela

Birinci adım: Düzgün cevap vermeyi bırakın ve bunun yerine başkalarının çözümlerine bakın. ;)
Raphael

Yanıtlar:


18

Algoritma tasarımı ve hesaplama karmaşıklığı ile ilgili derslerin bu konulara aşina olmayan öğrenciler için her zaman zor olduğunu düşünüyorum çünkü bir dereceye kadar matematiksel olgunluk ve problem çözme becerisi gerektiriyorlar. "Hesaplamalı karmaşıklık" üzerine ilk yüksek lisans dersimde, saf matematik diplomasına sahip olan bir arkadaşım bana, bu dersin çok fazla matematik geçmişi gerektirmemesine rağmen ne kadar şaşırmış olduğunu söyledi. ders taslağı), aslında onun saf matematik lisans derecesi neredeyse tüm becerileri gerekli!

Sipser'in kitabından okuma ve alıştırmalar yaparak en çok "yol" hakkında bilgi sahibi olduğumu buldum (lisansüstü eğitimime ilk başladığımda) . Alıştırmaları yaptığınızdan emin olun, çünkü problem çözme becerisi ve matematiksel olgunluk sadece bir grup gerçek veya tanım değil, öğrenmek istediğiniz şeydir.

Bununla birlikte, Sipser'in kitabı sadece karmaşıklık ve NP bütünlüğü maddeleri için iyidir, CLRS kitabını değiştirmek yeterli olmayacaktır. CLRS kitabıyla ilgili tek sorun, kapsamlı kapsama alanının avantajının zayıflığı olabileceğidir, çünkü kitap öğrenciler için oldukça korkutucu veya ezici görünebilir. Bu yüzden tavsiyem gerçekten kütüphaneye gitmeli ve algoritmalarla ilgili kitaplar aramalı, tek tek taramalı ve düşünme modelinize en uygun olanları seçmelisiniz. Ve yine egzersiz yapmayı unutmayın!

Algoritmalar için şahsen aşağıdaki kitapları öneriyorum (Sadeq ve JeffE tarafından önerilenlerin yanı sıra):

  • S. Dasgupta, CH Papadimitriou ve UV Vazirani'nin çok okunabilir ve güzel kitabı Algoritmaları .
  • Katil , Jeff Erickson'un notlarını (veya kitap taslağını). (JeffE kendi notlarını öneremeyecek kadar mütevazı olduğu için, bunu kendim yapmak zorundayım.)

Genel olarak, belirli bir algoritmayı veya veri yapısını her incelediğinizde, bir şekilde ders kitabınızdaki açıklama sizin için yeterince açık değilse, o zaman en iyi yol google'da o konunun ders notlarını aramaktır. Mayıs ayında, aynı şeyin farklı açıklamaları sonunda size tam resmi verir. En azından benim için böyle çalışıyor.


8
Jeff'in katil notları için +1. Onları okumaktan her zaman zevk alırım. Algoritma kelimesinin Arapça kaligrafi çok güzel.
Muhammed Al-Türkistan
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.