Kabul cevabı oldukça iyi olsa da, hala gerçek sebebi olan şeye dokunmuyor neden .O(n)=O(2n)
Big-O Notasyonu ölçeklenebilirliği açıklar
Özünde, Big-O Notation bir algoritmanın ne kadar sürdüğünün açıklaması değildir. Ayrıca, bir algoritmanın kaç adım, kod satırı veya karşılaştırmanın yapıldığının açıklaması da yoktur. Bir algoritmanın giriş sayısı ile nasıl ölçeklendiğini tanımlamak için kullanıldığında en kullanışlıdır.
Örneğin, bir ikili aramayı ele alalım. Sıralanmış bir liste verildiğinde, içinde rasgele bir değeri nasıl bulursunuz? Ortadan başlayabilirsiniz. Liste sıralandığından, orta değer, hedef değerin listenin yarısında olduğunu söyleyecektir. Bu nedenle, aramanız gereken liste artık ikiye bölünmüştür. Bu, özyinelemeli olarak uygulanabilir, ardından yeni listenin ortasına gider ve böylece liste boyutu 1 olana ve değerinizi bulana kadar (veya listede bulunmaz). Listenin iki katına çıkarılması, algoritmaya logaritmik bir ilişki olan yalnızca bir adım daha ekler. Dolayısıyla bu algoritma . Logaritma temel 2'dir, ancak bu önemli değildir - ilişkinin özü, listeyi sabit bir değerle çarpmanın zamana yalnızca sabit bir değer katmasıdır.O(logn)
Sıralanmamış bir listeyle standart aramayı karşılaştırın - bu durumda bir değer aramanın tek yolu her birini kontrol etmektir. En kötü senaryo (Big-O'nun özellikle ima ettiği şey), değerinizin en sonunda olmasıdır, yani boyutunun bir listesi için değerlerini kontrol etmeniz gerekir . Listenin boyutunu ikiye katlamak, kontrol etmeniz gereken sayıyı iki katına çıkarır, bu da doğrusal bir ilişkidir. . Ancak, her değer üzerinde iki işlem yapmak zorunda olsanız bile, bazı işlemler, örneğin, doğrusal ilişki hala geçerlidir. , tanımlayıcı olarak kullanışlı değildir, çünkü aynı ölçeklenebilirliği tanımlar .nnO(n)O(2n)O(n)
Bu cevapların çoğunun temelde Big-O tanımını okuyarak bu sonuca varmanızı söylediğini takdir ediyorum. Ama bu sezgisel anlayış kafamı sarmak için epey zaman aldı ve bu yüzden size olabildiğince açık bir şekilde yerleştirdim.