O (1), O (n log n) ve O (log n) karmaşıklıklarına sahip günlük kullandığımız bazı algoritmalar nelerdir?
O (1), O (n log n) ve O (log n) karmaşıklıklarına sahip günlük kullandığımız bazı algoritmalar nelerdir?
Yanıtlar:
Soruda verildiği gibi Zaman karmaşıklığına sahip Algoritmalar / İfade Grubu örnekleri istiyorsanız, işte küçük bir liste -
O(1)
zamanO(n)
zamanÖzetle, doğrusallık gerektiren tüm Kaba Kuvvet Algoritmaları veya Noob algoritmaları O (n) zaman karmaşıklığına dayanmaktadır.
O(log n)
zamanO(n log n)
zaman'Log n' çarpanı, Böl ve Fethet dikkate alınarak tanıtıldı. Bu algoritmalardan bazıları en iyi optimize edilmiş olanlardır ve sıklıkla kullanılırlar.
O(n^2)
zamanBunların, O (nlogn) muadilleri mevcutsa, daha az verimli algoritmalar olduğu varsayılır. Genel uygulama burada Brute Force olabilir.
O(log n)
önce değiştirmenizi istiyor O(n)
. haha :)
Basit bir örnek O(1)
olabilir return 23;
- ne olursa olsun giriş, bu sabit, sonlu sürede dönecektir.
Tipik bir örnek, O(N log N)
iyi bir algoritma ile bir girdi dizisini sıralamaktır (örneğin, birleştirme sıralaması).
Tipik bir örnek, O(log N)
sıralı bir giriş dizisinde ikiye bölünerek bir değer aramak olabilir.
O (1) - çoğu pişirme prosedürü O (1) 'dir, yani yemek pişirecek daha fazla insan olsa bile sabit bir zaman alır (bir dereceye kadar, çünkü tencere / tavalarınızda yer kalmayabilir) ve pişirmeyi bölmemiz gerekiyor)
O (logn) - telefon rehberinizde bir şey bulmak. İkili aramayı düşünün.
O (n) - n'nin sayfa sayısı olduğu bir kitap okumak. Bir kitabı okumak için gereken minimum süredir.
O (nlogn) - Birleştirme veya hızlı sıralama yaparak kartları ayırmadığınız sürece, her gün yapabileceğiniz, günlük olmayan bir şeyi hemen düşünemiyorum!
Size bazı genel algoritmalar sunabilirim ...
Bunlar, ödev / röportaj türü bir soru gibi göründüğü için içgüdüsel tepkiler olacaktır. Daha somut bir şey arıyorsanız, bu biraz daha zordur, çünkü genel olarak halk, popüler bir uygulamanın temelini oluşturan uygulama (tabii ki açık kaynağı korumak) hakkında hiçbir fikre sahip olmayacaktır ve konsept genel olarak bir "uygulama" için geçerli değildir.
O (1): Satrançta bir sonraki en iyi hamleyi bulmak (veya bu konuda Go). Oyun durumlarının sayısı sınırlı olduğundan sadece O (1) :-)
O(1)
nanosaniye yaşayacağım ve hangisinin O(1)
önce olacağını kesinlikle biliyorsunuz ...
Yazılım uygulamasının karmaşıklığı ölçülmez ve büyük-O gösterimiyle yazılmaz. Yalnızca algoritma karmaşıklığını ölçmek ve aynı alandaki algoritmaları karşılaştırmak yararlıdır. Büyük ihtimalle, O (n) dediğimizde, bunun "O (n) karşılaştırmaları " veya "O (n) aritmetik işlemler" olduğunu kastediyoruz . Bu, herhangi bir algoritma veya uygulamayı karşılaştıramayacağınız anlamına gelir.
0 (logn) -Binary arama, bir dizideki tepe elemanı (birden fazla tepe olabilir) 0 (1) - python'da bir listenin veya dizenin uzunluğunu hesaplayan. Len () işlevi 0 (1) zaman alır. Bir dizideki bir elemana erişim 0 (1) zaman alır. Bir yığındaki itme işlemi 0 (1) zaman alır. 0 (nlogn) -Merge sıralaması. python'da sıralama, nlogn süresi alır. bu yüzden listname.sort () 'u kullandığınızda, nlogn süresi alır.
Not - Bir hash tablosunda arama yapmak bazen çarpışmalar nedeniyle sabit süreden daha uzun sürer.
O (2 N )
O (2 N ), giriş veri setine her ekleme ile büyümesi iki katına çıkan bir algoritmayı belirtir. Bir O (2 N ) fonksiyonunun büyüme eğrisi üsteldir - çok sığdan başlar, sonra meteorik olarak yükselir. O (2 N ) işlevine bir örnek , Fibonacci sayılarının özyinelemeli hesaplamasıdır:
int Fibonacci (int number)
{
if (number <= 1) return number;
return Fibonacci(number - 2) + Fibonacci(number - 1);
}
Tower of Hanoi
daha iyi bir örnek olurdu.