Algoritmalar tarafından çözülen her problemin, kolaylıkla tanımlanmış bir aday çözüm seti bulunmamaktadır.
Örneğin, bir sinyal numunesini temsil eden bir dizi sayısal değer verildiğini varsayalım ve bu örneklerin ayrık Fourier dönüşümü hesaplamak istiyoruz. Ayrık Fourier dönüşümü, zaman alanını frekans alanına dönüştürerek sayısal katsayılar üretir ve örneklenmiş sinyaldeki çeşitli frekansların gücünü belirler.
Sinyal işlemenin kalbinde yatmanın yanı sıra ayrık Fourier dönüşümü, veri sıkıştırma ve büyük polinomlar ve tamsayılar çarpımı uygulamalarına sahiptir.
Data Structers(Veri Yapıları):
İlerleyen derslerimizde çeşitli veri yapıları bulunmaktadır. Veri yapısı, erişimi ve modifikasyonu kolaylaştırmak için verileri depolamanın ve düzenlemenin bir yoludur. Tek bir veri yapısı, tüm amaçlar için iyi çalışmaz ve bu nedenle, bunların birkaçının güçlü ve sınırlamalarını bilmek önemlidir.
Technique(Teknik):
Derslrimiz algoritmalar için bir “yemek kitabı” olarak kullansan da, yayınlanmamış olan her algoritmayı hızlı bir şekilde bulamayacağınız karşılaşabilirsiniz. Derslerimiz, size algoritma tasarlama ve analiz etme teknikleri öğretecek, böylece kendi başına algoritmalar geliştirebilecek, doğru cevap verebildiğinizi gösterecek ve bunların işlevselliklerini anlayabileceksiniz.
Hard Problems(Zor Sorunlar):
Derslerimiz olağan ölçütü, hız, yani bir algoritmanın sonucunu ne kadar sürdürebileceği anlamına gelir. Bununla birlikte, etkili bir çözümün bilinmediği bazı sorunlar vardır. NP-komple olarak bilinen bu sorunların ilginç bir alt kümesini inceliyor. NP-complete problemleri neden farklıdır? Birincisi, NP’ye komple bir problem için etkili bir algoritma bulunmamasına rağmen, hiç kimse kanıtlamamıştır.Sorunlar için sadece geçerli bir algoritma var olamaz. Diğer bir deyişle,NP-eksiksiz problemler için etkili algoritmaların var olup olmadığına bakar. İkincisi, NP-komple problemler seti,eğer etkin bir algoritma birinin birinin için özürseldir, bunun için tüm hesap algoritmaları var oluyor. NP-eksiksiz problemler arasındaki bu ilişki, daha etkin çözümlerin sergilenmesini daha da kolay kılmaktadır. Üçüncüsü, birkaç NP tam problemi, efektif algoritmaları bildiğimiz sorunlarla benzer, fakat aynı değildirler.
Bilgisayar bilimcileri, problem bildiriminde yapılacak küçük bir değişikliğin, en iyi bilinen algoritmanın etkinliği üzerinde büyük bir değişime neden olabileceği her zaman bilinir. NP komple problemleri hakkında bilgi sahibi olmalısınız çünkü bazıları şaşırtıcı bir şekilde sıklıkla gerçek uygulamalarda ortaya çıkar.
NP-eksiksiz bir problem için etkili bir algoritma üretmeye çalışıyorsanız, sonuçsuz bir aramada büyük zaman harcayabilirsiniz. Sorunun NP-tamamlandığını gösterebilirseniz, bunun yerine iyi bir çözüm ancak mümkün olan en iyi çözümü veren etkili bir algoritma geliştirerek zamanınızı harcayabilirsiniz. Somut bir örnek olarak, merkezi bir depolu bir teslimat şirketi düşünün. Her gün, depoya kadar her kamyonet yüklendikten sonra, vericilere malları göndererek çeşitli adreslere gönderir. Her şeyden önce, gelecek hafta yüklenmeye hazır olacak şekilde geri çekilmek zorundasınız. Maliyetleri düşürmek için şirket, her kamyonla en düşük toplam mesafeyi veren bir teslimat durağı emri seçmek istiyor. Bu problem bilinen “seyahat-satış elemanı problemi” ve NP-tamamlandı. Bilinen etkili bir algoritma bulunmamaktadır. Bununla birlikte, bazı varsayımlar altında, mümkün olan en küçük değerin çok üzerinde olmayan genel bir mesafe veren etkili algoritmaları biliyoruz.
Parallelism(Parelellik):
Uzun yıllar boyunca, sabit bir oranda artan işlemci saat hızlarına paralellik göstermiştir. Fiziksel kısıtlamalar, artan saat hızlarına temel bir barikat oluşturur;
ancak güç yoğunluğu saat hızıyla lineer olarak arttığı için, fişler saat hızları yeterince yüksek olduğunda erime riskini taşır. Bu nedenle, saniyede daha fazla hesaplama yapabilmek için çipler sadece bir değil, birkaç işlem “çekirdeği” içermek üzere tasarlanıyor.Bu çok çekimli bilgisayarları, tek çipte ardışık sıralı bilgisayarlara benzetebiliriz; Başka bir deyişle, “paralel bilgisayar” ın parçasıdırlar. Çoklu bilgisayarlardan en iyi performansı seçmek için, paralellik düşüncesiyle algoritmalar tasarlamamız gerekir.