Video: Koddan Karmaşıklık Analizi Yapılması 2024
Aptallar İçin Algoritma Kısım Hile sayfası
Algoritmaların karmaşık olduğunu zaten biliyorsunuz. Bununla birlikte, bir algoritmanın ne kadar karmaşık olduğunu bilmeniz gerekir; çünkü daha karmaşık olan algoritma o kadar uzun sürer. Aşağıdaki tablo, çalışma süresine göre sunulan karmaşıklığın çeşitli düzeylerini (en hızlıdan en yavaşa) anlamanıza yardımcı olur.
Karmaşıklık | Açıklama |
Sabit karmaşıklık O (1) | Ne kadar çok girdi girdiğinize bakılmaksızın değişmez bir yürütme süresi sağlar. Her girdi, tek bir yürütme süresi birimi gerektirir. |
Logaritmik karmaşıklık O (log n) | İşlemlerin sayısı girdiden daha yavaş büyür ve algoritmayı küçük girdilerle daha az verimli, daha büyük olanlarla daha verimli hale getirir. Bu sınıfın tipik bir algoritması ikili aramadır. |
Doğrusal karmaşıklık O (n) | İşlemler girişle 1: 1 oranında büyür. Tipik bir algoritma, girişi bir kez taradığınızda ve onun her bir öğesine bir işlem uyguladığınızda tekrarlama işlemidir. |
Linearitmik karmaşıklık O (n log n) | Karmaşıklık, logaritmik ve doğrusal karmaşıklık arasındaki bir karışımı ifade eder. Mergesortsort, Heapsort ve Quicksort gibi verileri sipariş etmek için kullanılan akıllı algoritmaların tipik bir örneğidir. |
İkinci dereceden karmaşıklık O (n 2 ) | İşlemler, girdi sayısının karesi kadar büyür. Başka yinelemelerde (bilgisayar bilimlerinde iç içe geçmiş yinelemeler olarak adlandırılır) tek bir iterasyona sahip olduğunuzda, karmaşıklığınız karmaşıktır. Örneğin, bir isim listesi var ve en benzer olanları bulmak için her ismi diğer tüm isimlerle karşılaştırıyorsunuz. Bazı daha az etkili sipariş algoritmaları böyle karmaşıklığı sunar: kabarcık sıralama, seçim sıralama ve ekleme sıralama. Bu karmaşıklık düzeyi, algoritmalarınızın bir çözüm bulmadan önce saatlerce hatta günler sürebilir anlamına gelir. |
Kübik karmaşıklık O (n 3 ) | İşlemler karesel karmaşıklığa göre daha hızlı büyür, çünkü şimdi birden çok iç içe geçmiş yinelemeye sahipsiniz. Bir algoritma bu karmaşıklık derecesine sahipse ve az miktarda veri (100, 000 öğe) işlemek zorunda kalırsanız, algoritma yıllarca çalışabilir. Girişin gücü olan bir dizi işleminiz olduğunda, algoritmanın polinom zamanında çalıştığı anlamına gelir. |
Üstel karmaşıklık O (2 n ) | Algoritma, eklenen her yeni eleman için önceki işlemlerin iki katı sayı alır. Bir algoritma bu karmaşıklığa sahip olduğunda, küçük sorunlar bile sonsuza kadar sürebilir. Kapsamlı aramalar yapan birçok algoritmanın üstel karmaşıklığı vardır. Bununla birlikte, bu karmaşıklık seviyesi için klasik örnek Fibonacci sayılarının hesaplanmasıdır. |
Faktöriyel karmaşıklık O (n!) | Bu algoritma, elemanlar arasındaki muhtemel kombinasyonların çokluğundan dolayı karmaşıklığın gerçek bir kabusu ortaya koymaktadır. Düşünüyorsanız: Girişiniz 100 nesneyse ve bilgisayarınızdaki bir işlem 10 999 - 6 saniyedir (günümüzde her bilgisayar için makul bir hız alır), yaklaşık 10 140 yılına ihtiyaç duyarsınız (evrenin yaşının 10 14 yıl olduğu tahmin edildiğinden, imkansız bir zaman süresi). Ünlü bir faktöryal karmaşıklık problemi, bir satış elemanının pek çok şehri ziyaret etmek ve başlangıç şehrine geri dönmek için en kısa güzergahı bulması gereken seyyar satıcı meselesidir.
|