Для вимірювання складності алгоритму це складність часу чи обчислювальна складність? У чому різниця між ними?
Я використовував для обчислення максимальної (найгіршої) кількості основних (найбільш витратних) операцій в алгоритмі.
Для вимірювання складності алгоритму це складність часу чи обчислювальна складність? У чому різниця між ними?
Я використовував для обчислення максимальної (найгіршої) кількості основних (найбільш витратних) операцій в алгоритмі.
Відповіді:
Комплексна обчислювальна здатність - лише більш загальний термін, оскільки час - це не єдиний ресурс, про який ми могли б розглянути. Наступним найбільш очевидним є простір, який використовує алгоритм, і тому ми можемо говорити про складність простору , також як частину обчислювальної складності. Дійсно, ми можемо зробити це для будь-яких заходів, які ви використовуєте, звичайно, деякі заходи є кориснішими, ніж інші.
Таким чином, підрахунок кількості кроків, які алгоритм виконує в гіршому випадку, дає часову складність, пов'язану з проблемою, яку вона вирішує, підраховуючи, скільки пам'яті / скільки клітинок стрічки він використовує, дає простір, пов'язаний складністю і т.д.
Пам'ятайте також, що якщо ви хочете бути суворими, складність стосується проблеми, а не алгоритму, тому проблема має межі складності, алгоритм має межі ресурсів (час роботи, використання простору ...). Це лише питання визначеної формальності, теорія складності займається проблемами. Так, алгоритми є ключовим інструментом для аналізу проблем, а складність і алгоритміка тісно пов'язані між собою, але формально ми б не сказали, що злиття-сортування (алгоритм) є в , це проблема S o r t i n g, яка полягає в P . Злиття-сортування використовує певні ресурси ( O ( n log n )кроки, наприклад). Обмеженість ресурсів і правильність алгоритму передбачають складність (верхню) межу проблеми, але вони різні речі. також є T C 0 -комплектним при A C 0 -редукціях, ця обмежена складність може бути справді заявлена лише для проблеми (але має алгоритмічні наслідки).
Цикломатична складність часто використовується як міра обчислювальної складності, корисний приклад наведено в /programming/9097987/calculation-of-cyclomatic-complexity
Можливо, існує багато різних (можливо, вкладених) шляхів через алгоритм, що надає йому високу цикломатичну складність, але жодні цикли не надають йому низької часової складності. Програма з одним циклом мала б низьку циклічну складність, але, можливо, велику складність у часі.
Цикломатична складність часто використовується як міра забезпечення, необхідного для коду. Більш детальна дискусія надана на http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Це відрізняється від часової складності, яка проводиться вимірюванням часу коду і може бути використана для оцінки сприйняття користувачами ефективності системи.