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.
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.
Yanıtlar:
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ı- 0aynı 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).
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.