algoritma zaman analizi “girdi boyutu” ve “girdi elemanları”


14

Hala bir algoritma için asemptomatik üst sınırı analiz etmek ve tanımlamak için kullanıldığında "giriş uzunluğu" ve "giriş boyutu" terimleri ile biraz karışık

Algoritma için giriş uzunluğunun, çok fazla veri türüne ve bahsettiğiniz algoritmaya bağlı olduğu anlaşılıyor.

Bazı yazarlar, girdi uzunluğunu girdiyi temsil etmek için gereken karakter boyutuna atıfta bulunurlar, bu nedenle algoritmada girdi kümesi olarak kullanıldığında "abcde" 6 karakterlik bir "girdi uzunluğu" na sahip olur.

Karakterler yerine sayı varsa (örneğin tamsayılar) bazen karakterler yerine ikili gösterim kullanılır, böylece "girdi uzunluğu" olarak hesaplanır Girdi kümesindeki Maks sayı L'dir).Nlog(L)

Girdi kümesi sayı olsa bile, "girdi uzunluğu" nu "karar değişkenleri" olarak tanımlayan başka sorunlar da vardır, bu nedenle aralığında sayıları olan N uzunluklu bir girdi kümesi için girdi uzunluğu sadece N (örneğin alt küme toplamı) veya sorunu belirtmek için gereken ikili yer değerlerinin sayısını daha da karmaşık hale getirir (inandığım şey aynıdır ) K * l O g ( L )0232Nlog(L)

Yani:

  • algoritmaya bağlıdır?
  • Her bir giriş uzunluğu "sürümü" ne demektir ve ne zaman kullanılır?
  • Hangisini kullanacağımıza karar vermek için kullanabileceğim bir kural var mı?

Yanıtlar:


10

En resmi anlamda, girişin boyutu algoritmanın Turing Machine uygulamasına göre ölçülür ve girişi kodlamak için gereken alfabe sembollerinin sayısıdır.

Bu elbette oldukça soyut ve pratikte çalışmak çok zor ya da en azından çok sinir bozucu - sınırlayıcıları vb. Nasıl belirleyeceğimizi düşünmemiz gerekecek. Vb. bir vekil girdi büyüklüğü ölçümü - daha rahat ve erişilebilir, ama bu analizimizde herhangi matematiksel problemleri neden olmaz bir şey.

"Abcde" örneğinizi kullanmak, normalde giriş için kullandığımız alfabenin küçük olması durumunda olur, bu nedenle karakterlik proxy ölçümünü kullanarak bile, Turing Machine'de bile, rahatsız olursak, "abcde" değerini , bazı sabit için uzunluğu en fazla olan bir kodlanmış forma dönüştürecek bir girdi kodlaması belirtin . Bir sabitin bu genişlemesi, sabit faktörleri rutin olarak attığımız için, asimptotik analizimizde tipik olarak hiçbir fark yaratmaz.5 × c c55×c c

Farklı bir durumda, genellikle bir girdi grafiğinin boyutunu köşe sayısı ölçeriz . Açıkça keyfi olarak büyük grafikler belirtmek istiyorsak, kodlanmış girişin boyutu sadece değildir - kenarlara ne oldu, örneğin? Bildiğimiz, grafiği bit cinsinden temsil eden makul bir kodlama şeması kullanabileceğimizdir . Bu, sabitten biraz daha fazla bir genişlemedir, ancak birçok ilginç durumda, sadece polinomların ayrıntılı bir kısmındaki şeylerle uğraşıyoruz ve polinomlar birçok şekilde güzel bir şekilde oluşturuyor - özellikle, örneğin, bizim çalışma süresi olduğunu belirlemek bir polinom, bazı polinom sonra bildiğimiz olduğunun N = c n 2 log n O ( p ( n ) ) p p O ( p ( n ) ) = O ( p ( N ) )nnN=cn2lognO(p(n))pp öyle ki , bu yüzden girişin resmi ölçüsüne geri döndüğümüzde, hala polinom zamanındayız.O(p(n))=O(p(N))

Bunun düşebileceği bir yer sayılarla çalışırken. büyüklüğüne sahip bir sayı bit olarak kodlanabildiğinden, çalışma süremiz , bu - gerçek giriş boyutunda üstel - örneğin , üyeliği hakkında konuşmak istersek , büyüklük giriş boyutu için bir proxy için kötü bir seçim yapar (örneğin Güçlü- matematik -tam ve Zayıf- -tam, bunu hatırla). Öte yandan, ilgilendiğimiz tek şey karar verilebilir olsaydı, o zaman yeterince iyi bir vekil önlem olurdu.n = O ( log m ) O ( m ) O ( 2 n ) m P N P N Pmn=O(logm)O(m)O(2n)mPNPNP

Bu nedenle, giriş boyutu için bir proxy ölçüsü seçmek için belirlenmiş bir kural olmasa da, gereksinim, proxy boyutunun giriş boyutuyla karşılaştırıldığında genişletilmesinin veya daralmasının kanıtlamaya çalıştığınız şeyle uyumlu olması gerektiğidir. Genel bir kural olarak, sabit faktör değişiklikleri neredeyse hiç önemli değildir, küçük polinom faktörleri normalde iyidir ve gördüğünüz temel teorinin çoğu için işe yarar, büyük polinom faktörleri teori için hala işe yarayabilir, ancak pratikte kötü bir sürpriz olabilir, üstel değişim miktarları normalde çok fazladır.


Cevap için teşekkürler. Giriş için P veya NP üyeliği hakkında konuşmak için doğru vekil seçimi hakkında konuştuğunuz kısım gerçekten ilginç, bu tamamen yeni bir soru olabilir! Bunun yanı sıra, önceki soruya geri dönüyor. Sizce hangisi, girdisinin bir tamsayı kümesi olduğu bir algoritma için en iyi proxy olacaktır? Sanırım belki de algoritmaya bağlı olacak? 3 potansiyel seçenek görüyorum: N (setin uzunluğu olarak) N * Log (L) (L maksimum değerdir) ve Log (Sum (set)).
Jesus Salas

@JesusSalas, kesinlikle onlarla ne yaptığınıza bağlı olabilir, ancak en basit "TM kodlamasına yeterince yakın" cevap olacaktır, ancak yine de açısından çalışma süresine bakmak ilginç olabilir , ya da belki ve en büyük sayının büyüklüğü - elbette bu sadece , ancak bazen olayları açık olmayan önlemlerle analiz etmek daha kolay olabilir. N N 2 log LNlogLNN 2logL
Luke Mathieson

Bu, üsleri kapsar, ancak bazı yanlışlıklar vardır. Bir Turing makinesinde "abcde" ifadesinin temsili karakter almaz : doğru alfabeyi seçerseniz beş karakter alır. Ve -vertex grafiğini temsil etmek için bitlerine ihtiyacınız yoktur : bitişiklik matrisi tam olarak bittir. c n 2 log n n n 25ccn2lognnn2
David Richerby

Belki zaman N ya da kullanımı , N günlük L algoritma her giriş elemanı üzerinde faaliyet için maliyet bağlı olabilir. Sanırım algoritmanın her giriş elemanı üzerindeki işini bit cinsinden bağımsız olarak yapmak için sabit bir zaman kullandığı varsayılırsa (ve bu kötüye kullanılmaz), o zaman N muhtemelen doğru olanıdır ve O (N) ile sonuçlanır. . Öte yandan, bitlerdeki girdi öğesi boyutu işlem maliyetini arttırırsa, N log L daha doğru görünür, çünkü üst sınırda girdiden hangi özelliklerin büyümeye dahil olduğunu ifade etmeliyiz
Jesus Salas

5c=1c=log255 O(n2logn)bit, ancak her iki normal kodlamayla da başa çıkabilen oldukça sağlam bir üst sınırdır.
Luke Mathieson

8

Hesaplama modelinize ve maalesef bazen algoritmanın kendisine bağlıdır.

  • ababcd
  • Modeliniz RAM ise, girişin boyutu girişin başlangıçta kaldığı kayıt / bellek hücresi sayısıdır. Tüm girdiyi teknik olarak bir kayıt defterine yazabildiğiniz için bu yanlış kullanılabilir. Ancak logaritmik maliyet modelini kullanırsanız hesaplamalar daha maliyetlidir.
  • ww

Ancak, birçok algoritma "gerçek" girdi boyutuna göre ölçülmez. O zaman, analizin ifadesinin ne anlama geldiğine dikkatlice bakmalısınız.

  • O(nlogn)nO(1)n
  • n×n

n


1
nO(n3)nn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.