Bir Big-Oh zaman karmaşıklığı birden fazla değişken içerebilir mi?


11

Diyelim ki iki dizenin analizini gerektiren bir dize işlemi yapıyorum. Uzunluklarının ne olabileceği hakkında hiçbir bilgim yok, bu yüzden iki ayrı aileden geliyorlar. veya O ( n + m ) algoritmasının karmaşıklığını çağırmak kabul edilebilir mi (saf veya optimize edilmiş bir algoritma kullanmamıza bağlı olarak)?Ö(n*m)Ö(n+m)

Benzer bir şekilde, seçtiğimiz algoritmanın aslında iki aşama gerektirdiğini varsayalım - ilk dizede, ilk maliyeti ödemeden herhangi bir sayıda dizeyi işlememize izin veren bir kurulum aşaması. Bir yapısı ve ardından herhangi bir sayıda O ( m ) olduğunu söylemek uygun kabul edilir mi?Ö(n)Ö(m) hesaplaması mu?

Her iki hesaplama da doğrusal olduğu için sadece adlandırmak uygun olur mu?Ö(n)


Biraz arka plan için bu cevabın yorumlarına bakın - böylesine çekişmeli bir soru soran cesaretle @corsiKa'ya olan saygım.
OldCurmudgeon

@OldCurmudgeon, anlıyorum. Bu yorum iş parçacığına wade nefret ediyorum. Oldcurmudgeon, büyük-O notasyonunu anlamadan büyük-O notasyonunu tartışıyor musunuz? Gerçekten garip. Ayrıca, siz ve corsiKa yanlış iletişim için bir reçete olan ve m parametrelerini tanımlamadan çalışma süresi boyunca tartışıyorsunuz . İpucu: Dizelerle uğraşırken yaygın bir kural , bir dizenin uzunluğunu ve bir dizenin uzunluğu için n'yi kullanmak için m'yi kullanmayı kabul etmektir - ancak ideal olarak bu açıklığı yapmak en iyisidir, çünkü aksi takdirde karışıklığa neden olabilir ( burada gösterilmiştir). nmmn
DW

@DW OldCurmudgeon'un okulda basitçe farklı bir tanım öğrenmiş olması muhtemeldir ... Aşağıdaki bir yorumda belirttiğim gibi, şimdiye kadar yapmayı hiç düşünmemiştim, ancak çoklu değişkenlerden kaçınmak mümkün. Belki bu - ya da onun gibi bir şey - standarttır?
Patrick87

2
Bunun burada ve burada yeterli cevapları olduğunu düşünüyorum .
Raphael

Yanıtlar:


14

Evet tabi ki. Bu iyi ve mükemmel kabul edilebilir. Çalışma süresi iki parametreye bağlı algoritmaları görmek yaygın ve standarttır.

Örneğin, genellikle derinlik-ilk aramanın olarak ifade edilen çalışma süresini görürsünüz; burada n , köşe sayısıdır ve m , grafikteki kenar sayısıdır. Bu tamamen geçerlidir. Bunun anlamı , algoritmanın çalışma süresi en çok c ( n + m ) olacak şekilde , tüm n > n 0 , m > m 0 için bir c ve n 0 , m 0 sayıları vardır.Ö(n+m)nmcn0,m0c(n+m)n>n0,m>m0. Tam çalışma süresi ise, başka bir deyişle, , söz konusu demek f ( n , m ) = O ( n + m ) mevcutsa c , n, 0 , m, 0 , öyle ki , n > N 0 ve m > m 0 anlamına gelir f ( n , m ) c ( n + m )f(n,m)f(n,m)=O(n+m)c,n0,m0n>n0m>m0f(n,m)c(n+m).

Evet, ilk aşamanın zaman aldığını ve ikinci aşamanın O ( m ) sürdüğünü söylemek tamamen uygun ve kabul edilebilir.O(n)O(m) zaman .

Önemli: ve m'nin ne olduğunu tanımladığınızdan emin olun . Sen "Bu bir olduğunu söyleyemeyiz Ç ( n ) Ne belirtmeden zaman algoritması" n olduğunu. Eğer n Problemin tanımında belirtilmemişse, bunu belirtmeniz gerekir. Örneğin, genellikle n = # köşe noktası ve m = tanımladığımız grafik algoritmalarına bakın.nmO(n)nnn=m= kenar sayısı .

Onlara zamanı diyebilir misiniz , hayır, elbette hayır - bir şekilde m = O ( n ) bilmiyorsanız . Tabii ki, m = O ( n ) olduğunu biliyorsanız , o zaman m + n = O ( n ) 'yi takip eder , böylece O ( m + n ) zaman algoritması da O ( n ) zaman algoritmasıdır. Ancak m = O (O(n)m=O(n)m=O(n)m+n=O(n)O(m+n)O(n) , buna O ( n ) zaman algoritması diyemezsiniz.m=O(n)O(n)

Bu temel şeyler. Her şeyi algoritma ders kitaplarında bulacaksınız.


1
@OldCurmudgeon, birçok standart algoritma ders kitabında bunun örneklerini bulacağınızdır. Hangilerine baktın? Önce derinlemesine arama (cevabımda bahsettiğim örnek) bölümüne bakmayı denediniz mi?
DW

2
@OldCurmudgeon CLRS egzersizi 3.1-8 sürümünde birçok değişkenin fonksiyonları için notasyonunun tam olarak bu tanımını sunar . Ve üst DFS işletim süresi üzerinde bağlanmış O ( V + e ) bir grafik için ( V , E ) . OO(V+E)(V,E)
Kirill

2
@Kirill Demek istediğim, geçmişte bir noktada, aksi takdirde yapmanın bir hata olarak değerlendirilebildiği ölçüde, toplam toplam uzunluğu dikkate almanın geleneksel olduğu düşünülüyordu. Bir öğrencinin sınavını derecelendirirsek ve bu öğrenci DFS'nin zaman karmaşıklığı için değişken olarak toplam girdi uzunluğunu kullandıysa, iki boyutu (V ve E) dikkate almamak bir hata olarak değerlendirir misiniz? Doğru olan ve insanların kabul etmek istedikleri, her zaman bir ve aynı değildir. n
Patrick87

1
Herkes Landau notasyonunu bu şekilde kullandığı sürece katılıyorum , ancak neredeyse hiç kimse aslında ne anlama geldiğini bilmiyor (parametreleri işlevsel olarak bağlamadığınız sürece). Ayrıca A. Schulz'un cevabında "temel" ve "ortak" kullanımın yanlış olduğunu belirterek başlayan makaleye de bakınız .
Raphael

1
@ Patrick87 Karmaşıklık teorisi , birçok iyi bilinen sınıfın tanımı sayesinde çoğunlukla girdi uzunluğunu (dikkate değer istisnalar hariç) kullanır. Algoritma analizi - ciddi bir şekilde yapıldığında - gerçek kaynak kullanımı hakkında (modelin izin verdiği ölçüde) bir şey öğrenmekle ilgilenir, böylece diğer parametreler tüm resmi boyamak için daha ilginç hale gelir (daha doğru).
Raphael
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.