Різниця між складністю у часі та обчислювальною складністю


14

Для вимірювання складності алгоритму це складність часу чи обчислювальна складність? У чому різниця між ними?

Я використовував для обчислення максимальної (найгіршої) кількості основних (найбільш витратних) операцій в алгоритмі.


2
Не відповідь на ваше запитання, але з огляду на ваш інтерес до подібних речей, вас також може зацікавити cs.stackexchange.com/q/13669/755
DW

1
"складність алгоритму" при посиланні на асимптотичний цикл є помилковим (часто використовуваним). Ви хочете сказати "асимптотичний час виконання".
Рафаель

Відповіді:


9

Комплексна обчислювальна здатність - лише більш загальний термін, оскільки час - це не єдиний ресурс, про який ми могли б розглянути. Наступним найбільш очевидним є простір, який використовує алгоритм, і тому ми можемо говорити про складність простору , також як частину обчислювальної складності. Дійсно, ми можемо зробити це для будь-яких заходів, які ви використовуєте, звичайно, деякі заходи є кориснішими, ніж інші.

Таким чином, підрахунок кількості кроків, які алгоритм виконує в гіршому випадку, дає часову складність, пов'язану з проблемою, яку вона вирішує, підраховуючи, скільки пам'яті / скільки клітинок стрічки він використовує, дає простір, пов'язаний складністю і т.д.

Пам'ятайте також, що якщо ви хочете бути суворими, складність стосується проблеми, а не алгоритму, тому проблема має межі складності, алгоритм має межі ресурсів (час роботи, використання простору ...). Це лише питання визначеної формальності, теорія складності займається проблемами. Так, алгоритми є ключовим інструментом для аналізу проблем, а складність і алгоритміка тісно пов'язані між собою, але формально ми б не сказали, що злиття-сортування (алгоритм) є в , це проблема S o r t i n g, яка полягає в P . Злиття-сортування використовує певні ресурси ( O ( n log n )PSortingПО(нжурналн)кроки, наприклад). Обмеженість ресурсів і правильність алгоритму передбачають складність (верхню) межу проблеми, але вони різні речі. також є T C 0 -комплектним при A C 0 -редукціях, ця обмежена складність може бути справді заявлена ​​лише для проблеми (але має алгоритмічні наслідки).SоrтiнгТС0АС0


@shekharsuman Під проблемою я маю на увазі формальне поняття обчислювальної задачі (наприклад, k-Vertex Cover), а не загальне значення. Обчислювальна складність - це класифікація обчислювальних задач, тому у формальному сенсі складність стосується того, що ми можемо сказати про проблему. Результати алгоритмів говорять нам про складність проблем, але самі по собі не є результатами складності (але неофіційно ми говоримо про складність алгоритму).
Люк Матьєсон

1
@shekharsuman вступний пункт сторінки Вікіпедії - досить хороший підсумок.
Люк Матьєсон

@Luke Спасибі, це робить все зрозумілим. Однак, якщо я можу використовувати ідіому "найбільш часто використовуваний тип складності для формальної оцінки алгоритмів" (Хоча я знаю, це не точно). Який би час проти обчислювальних? Я думаю, що в цілому найголовніше - це час, оскільки ресурси в деякому сенсі є більшими!
Медіана Хілала

1
Час @MedianHilal - це дійсно найчастіше вважається мірою складності проблеми. Простір не надто відстає (принаймні, теоретиками складності та людьми, що мають справу з дуже великими наборами даних, тим більше щодня).
Люк Матьєсон

-2

Цикломатична складність часто використовується як міра обчислювальної складності, корисний приклад наведено в /programming/9097987/calculation-of-cyclomatic-complexity

Можливо, існує багато різних (можливо, вкладених) шляхів через алгоритм, що надає йому високу цикломатичну складність, але жодні цикли не надають йому низької часової складності. Програма з одним циклом мала б низьку циклічну складність, але, можливо, велику складність у часі.

Цикломатична складність часто використовується як міра забезпечення, необхідного для коду. Більш детальна дискусія надана на http://docs.sonarqube.org/display/SONAR/Bad+Distribution+of+Complexity . Це відрізняється від часової складності, яка проводиться вимірюванням часу коду і може бути використана для оцінки сприйняття користувачами ефективності системи.


Питання полягає в обчислювально-складній, а не в цикломатичній складності!
Am_I_Helpful

Ви можете прочитати ОП - він запитує про складність алгоритму - Цикломатична складність дає статичну міру обчислювальної складності алгоритмів - спробуйте додати позитивні відгуки наступного разу
вельветості

2
Цикломатична складність не вимірює обчислювальної складності. Складність обчислень стосується часу виконання, а не того, наскільки складна структура вихідного коду.
DW

@DW Точніше, складність обчислень стосується ресурсів, необхідних для вирішення проблеми (які можуть включати простір, чергування, дзвінки Oracle тощо), а також час.
Девід Річербі

@DavidRicherby Я не є експертом з цього питання, тому, будь ласка, виправте, якщо не так. Заходи статичної складності, такі як розмір програми, відіграють певну роль у певній ситуації. Маю рацію, що це більше стосується складності Колмогорова. Чи не буде це також для цикломатичної складності? Один вид складності для написання програм або проблем, а інший для їх вирішення або запуску ... можливо, коротке наближення ситуації. Я не впевнений, що написав би розумне запитання з цього приводу.
бабу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.