Takip et

JavaScript ile En Uzun Artan Alt Dizi Bulma

JavaScript ile En Uzun Artan Alt Dizi Bulma

Merhaba! Bugün, JavaScript programlama dilinde en uzun artan alt diziyi (Longest Increasing Subsequence – LIS) bulma problemine detaylı bir şekilde bakacağız. Bu problem, algoritma ve veri yapıları alanında sıkça karşılaşılan ve farklı çözüm yöntemleri olan önemli bir konudur. Yazımızda, hem problemi anlayacağız hem de etkili bir JavaScript çözümü geliştireceğiz. Ayrıca, performans karşılaştırmaları yaparak farklı yaklaşımların güçlü ve zayıf yönlerini ele alacağız.

Öncelikle, problemi daha iyi anlamak için bir örnek verelim. [10, 9, 2, 5, 3, 7, 101, 18] dizisi ele alındığında, en uzun artan alt dizi [2, 3, 7, 101] veya [2, 5, 7, 101] olabilir. Her iki dizinin uzunluğu da 4’tür ve bu problemde aradığımız en uzun artan alt dizinin uzunluğudur. Bu değer, farklı alt dizilerin uzunlukları karşılaştırılarak bulunur. Bu problemin çözümü için çeşitli algoritmalar kullanılabilir, ancak en yaygın olanları dinamik programlama ve ikili arama kullanarak yapılan yaklaşımlardır.

Dinamik Programlama ile Çözüm

Dinamik programlama yaklaşımı, alt problemlerin çözümlerini saklayarak ve tekrar eden hesaplamaları önleyerek daha verimli bir çözüm sunar. Bu yöntemde, her bir eleman için, o elemana kadar uzanan en uzun artan alt dizinin uzunluğunu hesaplarız. Bu uzunluklar, bir dizi içerisinde saklanır ve sonrasında en büyük değer bulunarak en uzun artan alt dizinin uzunluğu belirlenir.


function longestIncreasingSubsequence(nums) {
  if (nums.length === 0) return 0;
  const dp = new Array(nums.length).fill(1); // Her elemanın en az 1 uzunlukta artan alt dizisi vardır.
  for (let i = 1; i < nums.length; i++) {
    for (let j = 0; j < i; j++) {
      if (nums[i] > nums[j]) {
        dp[i] = Math.max(dp[i], dp[j] + 1);
      }
    }
  }
  return Math.max(...dp);
}

console.log(longestIncreasingSubsequence([10,9,2,5,3,7,101,18])); // 4

Yukarıdaki kodda, dp dizisi her eleman için en uzun artan alt dizinin uzunluğunu tutar. İç içe döngülerle, önceki elemanlarla karşılaştırma yapılarak dp dizisi güncellenir. Sonrasında, dp dizisindeki en büyük değer, en uzun artan alt dizinin uzunluğunu verir. Bu yöntemin zaman karmaşıklığı O(n²) şeklindedir, yani dizi uzunluğunun karesiyle orantılıdır.

İkili Arama ile Optimize Edilmiş Çözüm

Dinamik programlama yöntemini ikili arama ile birleştirerek daha verimli bir çözüm elde edebiliriz. Bu yöntemde, artan bir alt dizi tutar ve yeni bir eleman geldiğinde, ikili arama ile bu alt dizide uygun bir yer buluruz. Bu, zaman karmaşıklığını O(n log n) seviyesine düşürür.

Bu yöntem, daha karmaşık görünse de, büyük veri kümeleri için çok daha hızlı bir çözüm sunar. Ancak, her iki yöntem de problemi çözmede etkilidir ve veri setinin büyüklüğüne bağlı olarak tercih edilebilirler. Daha fazla bilgi için fatihsoysal.com adresini ziyaret edebilirsiniz.

Sonuç olarak, en uzun artan alt dizi problemi, algoritma ve veri yapıları alanında önemli bir problemdir ve farklı çözüm yöntemleri sunmaktadır. Bu makalede ele aldığımız dinamik programlama ve ikili arama tabanlı yöntemler, bu problem için etkili çözümler sunmaktadır. Veri setinin büyüklüğü ve performans gereksinimleri göz önünde bulundurularak en uygun yöntem seçilebilir. Daha fazla örnek ve detaylı açıklamalar için bu bağlantıyı inceleyebilirsiniz.

#Etiketler: JavaScript, Algoritma, Veri Yapıları, En Uzun Artan Alt Dizi, Dinamik Programlama, İkili Arama, Longest Increasing Subsequence, LIS, Programlama, Kodlama

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.