Чи існує метод автоматичного аналізу алгоритмів виконання часу?


10

Мені цікаво, чи існує метод автоматичного аналізу часу виконання, який працює принаймні на відповідній підмножині алгоритмів (алгоритми, які можна проаналізувати)?

Я гуглив "Автоматичний аналіз алгоритму", який дав мені це, але це занадто математично. Я просто хочу простий приклад psuedocode, який я можу зрозуміти. Можливо, це занадто конкретно, але я вважав, що варто це зняти.


Я не бачу, як стрес між "будь-яким" і "а" пояснює, що ви насправді переслідуєте. Якщо якась процедура прийняття рішення пов'язана з певним алгоритмом B, то реального вводу немає і відповідь завжди однакова. Я думаю, що ви хочете запитати, чи є "будь-який алгоритм в межах якогось класу алгоритмів", де клас пов'язаний / відомий. (редагувати: на це також вказувалось коментар мого муму).
Ніколас Манкузо

2
Неоднозначність використання «а» та «будь-якого» саме тому були винайдені кількісні показники .
Нейт Елдредж

2
Я відредагував питання, щоб зосередити увагу на відповідних частинах. Зверніть увагу, як я використовую абсолютно нульову математику, щоб висловити проблему точно (наскільки ви вказали своє запитання до цього часу) і лаконічно. Зараз питання досі не поставлене: звичайно , є такі алгоритми. Наприклад, існує простий алгоритм, який аналізує всі алгоритми з (дуже релевантного) класу алгоритмів, які працюють у часі . Отже, вам явно потрібно поставити деякі обмеження на набори входів. (Зверніть увагу, що може бути не "простий приклад у psuedocode, який я можу зрозуміти".)Θ(нжурналн)
Рафаель

Відповіді:


12

Інструмент COSTA робить саме це, хоча в багатьох випадках виходить з ладу, як ви можете уявити, через проблеми з обчислюваністю . Про це існує багато праць ; Аналіз витрат байт- коду Java Е. Альберта, П. Аренаса, С. Генаїма, Г. Пуебла, Д. Занардіні - хороший вихідний пункт.

Запропонований підхід полягає в тому, щоб зробити висновок про час запуску з коду Javabyte, перетворити це у закриту форму. Інструмент також обчислює межі використання місця.


8
@Nathvi Я можу зрозуміти, що вас дратують деякі коментарі, які, я погоджуюсь, були не дуже потрібні, але ви також повинні бути обережними, щоб не використовувати термін "педантичний порив" для роботи дуже авторитетних вчених (і, до речі, моя відповідь). Ви маєте право не любити математику, але навряд чи ви без неї будете дуже далеко, а бездоганні зневажливі слова нікому не допоможуть.
бабу

12

Жоден алгоритм не може вирішити, зупиняється чи ні алгоритм, і, зокрема, жоден алгоритм не може чітко проаналізувати складність заданого алгоритму.


2
Моє запитання не стосується довільного введеного алгоритму, який, якби він був, то ваша відповідь буде правильною через проблему зупинки. Ви були б правильні, якби моє запитання було сформульовано: "Чи існує алгоритм A, який бере будь-який алгоритм B, а потім виводить складність часу алгоритму B?"
Натві

6
Якщо алгоритм B фіксований, то переконайтеся, що існує алгоритм А. Досить мати алгоритм, який не робить нічого, окрім друку "O (n)" або будь-якої міри складності, що відповідає B. Якщо для алгоритму A існує лише один можливий вхід, тоді нам потрібен лише один вихід.
mhum

5
@Nathvi мені теж було не зрозуміло - я також зрозумів питання як "чи існує алгоритм пошуку складності будь-якого іншого алгоритму", і я досі не розумію вашого реального питання. Якщо ви рахуєте підрахунки, очевидно,> так інтерпретували це 2 людини. У разі плутанини, дійсно корисно відредагувати своє питання, інакше лише люди, які читають цю розмову (а не всі, хто читає питання), зрозуміють, що ви запитуєте, і дадуть хороші відповіді. Схоже, ви відчували, що відповідь DW була ворожою - FWIW, я не думаю, що це було призначено ..
jkff

6
@ignis Відповідь може бути неповною, але речення, яке написав Юваль, абсолютно правильне. І проблема зупинки - це не якась екзотична сторона: це сама суть обчислень.
Девід Річербі

3
@nikie Це не допомагає, що стосується цього питання; Межі виконання не визначаються навіть на множині всіх алгоритмів, які завжди закінчуються.
Рафаель

9

Я знаю один підхід до (напів-) автоматизованого середнього аналізу випадків, а саме MaLiJAn ¹. Це дуже нагадує тип аналізу, який Кнут використовує в TAoCP. Основна ідея - це

  • моделювати програму (потік) як Марківський ланцюг,
  • н
  • н
  • використовуйте комп'ютерну алгебру для отримання середньої вартості (wrt ці функції).

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

Усі етапи, крім екстраполяції, є строгими [2], і було показано, що метод відтворює відомі результати з високою точністю, звичайно, з огляду на відповідні випадкові введення вибірки. Хоча немає ніяких доказів чи навіть гарантій наближення результатів (крок екстраполяції поки що є суто евристичним) результати, отримані за допомогою інструменту, добре допомагають експериментувати з важкими для аналізу алгоритмів та формулювати гіпотези [3,4].


  1. Повне розкриття: Я був членом цієї дослідницької групи і брав участь у розробці цього інструменту.
  2. Аналіз максимальної вірогідності алгоритмів та структур даних У. Лаубе та М. Небелем (2010) [ препринт ]
  3. Інжиніринг подвійного зворотного скорочення Quattort Java 7 з використанням MaLiJAn від S. Wild et al (2012) [ препринт ]
  4. Аналіз максимальної вірогідності методу Форда – Фулкерсона на спеціальних графіках У. Лаубе та М. Небеля (2015) [ препринт ]

Чи ці методи приходять з оцінкою точності середнього аналізу випадку?
Мартін Бергер

@MartinBerger На жаль, ні. У нас є деякі ідеї з цього приводу, але ще нічого не затверділо, не кажучи вже про реалізоване. Зауважте, що легко обдурити будь-який метод, який перевіряє лише кінцево багато розмірів введення, тому сподівання взагалі мало. З припущеннями щодо функцій виконання та / або наборів даних щось може бути можливим. Інструмент повинен принаймні мати можливість сказати "потрібно більше даних".
Рафаель

Це цікаво. Я сподіваюся, що ви отримаєте цю додаткову роботу.
Мартін Бергер

8

Звичайно, як зазначає Юваль Філіус, не слід очікувати загального вирішення таких проблем. Але як це зазвичай буває, можна знайти рішення для цікавих підмножин загальної справи.

Я жодним чином не знаю експертів у цій галузі, і навіть не знаю, що я знаю про подібні роботи. Це стосується автоматичного аналізу середньої складності, і робота була виконана Філіпом Флайолетом та його колегами.

λυ´ω

Один документ, який я знайшов в Інтернеті, - це документ 1990 року: Автоматичний середній випадок аналізу алгоритмів Філіпа Флайолета, Пола Цимермана та Бруно Салві .

Я б очікував, що пізніші документи продовжать цю роботу, але я не знаю насправді. Робота була досить сильно цитується, і пошук у мережі Інтернет повинен дати новішу роботу з тієї ж теми.

Зараз я боюся, що робота Флайолета та його колег була дуже математичною, і я не сподівався б на легке читання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.