Zaman karmaşıklığı ve hesaplama karmaşıklığı arasındaki fark


14

Bir algoritmanın karmaşıklığını ölçmek için zaman karmaşıklığı mı, yoksa hesaplama karmaşıklığı mı? Onların arasındaki fark ne?

Algoritmada temel (en pahalı) işlemin maksimum (en kötü) sayısını hesaplardım.


2
Sorunuza bir cevap değil, ancak bu tür şeylere
DW

1
asimptotik runime atıfta bulunurken "bir algoritmanın karmaşıklığı" (sık kullanılan) bir yanlış adlandırmadır. "Asimptotik çalışma zamanı" demek istersiniz.
Raphael

Yanıtlar:


9

Hesaplama karmaşıklığı daha genel bir terimdir, çünkü zaman dikkate almak isteyebileceğimiz tek kaynak değildir. Bir sonraki en belirgin şey algoritmanın kullandığı alandır ve dolayısıyla hesaplama karmaşıklığının bir parçası olarak alan karmaşıklığı hakkında da konuşabiliriz . Gerçekten de, kullandığınız her önlem için bunu yapabiliriz, elbette bazı önlemler diğerlerinden daha yararlıdır.

Bu nedenle, bir algoritmanın en kötü durumda attığı adımların sayısı, çözdüğü problem için bir zaman karmaşıklığı verir, ne kadar bellek / kaç bant hücresi kullandığını bir boşluk karmaşıklığına bağlı vb.

Sıkı olmak istiyorsanız, karmaşıklık algoritmaya değil, soruna atıfta bulunur, bu nedenle bir sorunun karmaşıklık sınırları vardır, bir algoritmanın kaynak sınırları vardır (çalışma süresi, alan kullanımı ...). Bu sadece tanımsal bir formalite meselesidir, karmaşıklık teorisi problemlerle ilgilenir. Evet, algoritmalar yakından birbirine bağlanmış analiz sorunları ve karmaşıklığı ve algoritmalarıyla için önemli bir araçtır, ama resmen biz söyleyemem Birleştirme-sırala (bir algoritma) yer alır sorun olarak, içindedir . Birleştir-Sırala belirli kaynakları kullanır (örneğin adımları). Algoritmanın kaynağa bağlılığı ve doğruluğu, problemin karmaşıklığını (üstte) ifade eder, ancak bunlar farklı şeylerdir. G O r t i n g p O ( n, log n ) S o r T ı n g , T Cı- 0 bir Cı- 0PSortingPO(nlogn)Sortingaynı zamanda indirimleri altında , bu karmaşıklık sınırı yalnızca bir sorun için gerçekten belirtilebilir (ancak algoritmik sonuçları vardır).TC0AC0


@shekharsuman Problemle genel bir anlam değil, bir hesaplama probleminin biçimsel fikrini kastediyorum (örn. k-Vertex Cover). Hesaplama karmaşıklığı, hesaplama sorunlarının sınıflandırılmasıdır, bu nedenle biçimsel olarak, karmaşıklık sorun hakkında söyleyebileceğimiz anlamına gelir. Algoritmalarla ilgili sonuçlar bize sorunların karmaşıklığı hakkında bir şeyler söylüyor, ancak kendi başına karmaşıklık sonuçları değil (ancak gayri resmi olarak bir algoritmanın karmaşıklığı hakkında konuşuyoruz).
Luke Mathieson

1
@shekharsuman wikipedia sayfasının açılış paragrafı oldukça iyi bir özet.
Luke Mathieson

@ Teşekkürler, bu her şeyi netleştirir. Ancak, "algoritmaları resmi olarak değerlendirmek için en çok kullanılan karmaşıklık türü" deyimini kullanabilirsem (bunun kesin olmadığını bilsem de). Zamana ve hesaplamaya karşı ne olurdu? Sanırım genel olarak en önemli şey zaman, kaynaklar bir anlamda daha genişletilebilir.
Medyan Hilal

1
@MedianHilal zamanı, bir sorunun karmaşıklığı için en yaygın olarak kabul edilen önlemdir. Alan çok geride değil (en azından karmaşıklık teorisyenleri ve çok büyük veri kümeleriyle uğraşan insanlar, günlük daha az).
Luke Mathieson

-2

Siklomatik karmaşıklık genellikle hesaplama karmaşıklığının ölçüsü olarak kullanılır. Https://stackoverflow.com/questions/9097987/calculation-of-cyclomatic-complexity

Bir algoritma yoluyla yüksek bir siklomatik karmaşıklık veren birçok farklı (muhtemelen iç içe geçmiş) yol olabilir, ancak düşük zaman karmaşıklığı veren döngüler yoktur. Tek döngülü bir program düşük bir siklomatik karmaşıklığa, ancak muhtemelen yüksek bir zaman karmaşıklığına sahiptir.

Siklomatik karmaşıklık genellikle kod için gerekli bakımın bir ölçüsü olarak kullanılır. Daha ayrıntılı bir tartışma http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity bölümünde verilmiştir . Bu, kodun çalışma süresi ölçümü olan zaman karmaşıklığından farklıdır ve kullanıcıların sistemin etkinliği hakkındaki algılarını değerlendirmek için kullanılabilir.


Soru, hesaplama-karmaşıklık hakkında, siklomatik karmaşıklık hakkında değil!
07

OP'yi okumak isteyebilirsiniz - bir algoritmanın karmaşıklığını soruyor - Siklomatik karmaşıklık, algoritmaların hesaplama karmaşıklığının statik bir ölçüsünü verir - bir dahaki sefere olumlu geri bildirim eklemeyi deneyin
velvetytoast

2
Siklomatik karmaşıklık hesaplama karmaşıklığını ölçmez. Hesaplama karmaşıklığı, kaynak kodu yapısının ne kadar karmaşık olduğunu değil, çalışma süresini ifade eder.
DW

@DW Daha doğrusu, hesaplama karmaşıklığı, bir problemi çözmek için gereken kaynakları ifade eder (zamanın yanı sıra boşluk, değişim, kehanet çağrıları ve benzerlerini de içerebilir).
David Richerby

@DavidRicherby Bu konuda uzman değilim, bu yüzden lütfen yanlışsa düzeltin. Bazı durumlarda program boyutu gibi statik karmaşıklık önlemleri rol oynar. Kolmogorov karmaşıklığıyla daha ilgili olduğunu doğru muyum? Bu aynı zamanda Siklomatik karmaşıklık için de geçerli midir? Bir tür program veya problem yazmak için karmaşıklık, diğeri ise bunları çözmek veya çalıştırmak için ... muhtemelen duruma kısa bir yaklaşım. Bu konuda mantıklı bir soru yazacağımdan emin değilim.
babou
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.