Амортизированная и средняя сложность выполнения

это не домашнее задание, я изучаю амортизированный анализ. Что-то меня смущает. Я не могу полностью понять значение между Амортизированной и Средней сложностью. Не уверен, что это правильно или нет. Вот вопрос:

--

Мы знаем, что сложность выполнения программы зависит от комбинаций входных данных программы --- Предположим, что вероятность программы со сложностью выполнения O (n) равна p, где p ‹* 1, а в других случаях (например, для (1 -p) возможные случаи), сложность выполнения - O (logn). Если мы запускаем программу с K различными входными комбинациями, где K - очень большое число, мы можем сказать, что амортизированная и средняя сложность выполнения этой программы составляет:

--

Первый вопрос: я прочитал вопрос здесь: Разница между средним случаем и амортизированным анализом

Итак, я думаю, что нет ответа на средний уровень сложности выполнения. Потому что мы не знаем, какой средний ввод. Но это похоже на p * O (n) + (1-p) * O (logn). Что правильно и почему?

Во-вторых, амортизируемая часть. Я прочитал Постоянное амортизированное время, и мы уже знаем, что амортизированный анализ отличается от анализа среднего случая тем, что вероятность не задействована; Амортизированный анализ гарантирует среднюю производительность каждой операции в худшем случае.

Могу я просто сказать, что амортизированное время выполнения - O (n). Но ответ - O (p n). Я немного не понимаю, зачем нужна вероятность. Хотя O (n) = O (p n), но я действительно не могу понять, почему там p может появиться? Я меняю образ мышления. Предположим, что мы потеряли время, тогда K становится очень большим, поэтому амортизируемое время выполнения составляет (K p O (n) + K * (1-p) O (logn)) / k = O (p n). Вроде бы та же идея со средним корпусом.

Извините за путаницу, помогите, пожалуйста, сначала спасибо!


person zongyuwu    schedule 29.01.2014    source источник
comment
Амортизированный анализ гарантирует среднюю производительность каждой операции в худшем случае. Нет, это не так. Это гарантирует наихудшее выполнение большого количества операций. Перечитайте +10 ответ RossFabricant по вашей первой ссылке.   -  person Mooing Duck    schedule 29.01.2014
comment
@MooingDuck: На самом деле это гарантирует наихудший случай сложности выполнения последовательности операций.   -  person Niklas B.    schedule 29.01.2014
comment
@NiklasB .: Да, наверное, ты прав   -  person Mooing Duck    schedule 29.01.2014
comment
Почему вы говорите, Но ответ - О (п * п)? В четвертом абзаце вы перечисляете одну идею, а затем спрашиваете, какая из них правильная, что не имеет смысла.   -  person Mooing Duck    schedule 29.01.2014
comment
Если мы запускаем программу с K различными входными комбинациями, где K - очень большое число, мы можем сказать, что амортизированная и средняя сложность выполнения этой программы равна Нет, ни один из этих методов не работает эмпирически, выбирая входные данные случайным образом и проверяя время выполнения. Амортизированный анализ на самом деле не имеет ничего общего с вероятностями.   -  person Niklas B.    schedule 29.01.2014
comment
Спасибо, я прочитал это из главы "Введение в алгоритмы амортизированного анализа", но пропустил, чтобы поместить здесь весь абзац.   -  person zongyuwu    schedule 29.01.2014
comment
И да, время выполнения каждой операции в худшем случае - O (n). Амортизация здесь совсем не поможет, по крайней мере, если мы не знаем больше о последовательности видов операций.   -  person Niklas B.    schedule 29.01.2014
comment
Похоже, это может быть проблема понимания прочитанного прежде всего. Мы сможем объяснить предмет, и, надеюсь, это поможет с пониманием - попробуйте перечитать этот раздел еще раз!   -  person comingstorm    schedule 29.01.2014
comment
@comingstorm: Я сомневаюсь, что это поможет, это действительно не похоже на хороший ресурс ...   -  person Niklas B.    schedule 29.01.2014


Ответы (1)


При «средней» или «ожидаемой» сложности вы делаете предположения о распределении вероятности проблемы. Если вам не повезло (или если ваш генератор проблем злонамеренно не соответствует вашему предположению 8 ^), все ваши операции будут очень дорогими, и ваша программа может занять гораздо больше времени, чем вы ожидаете.

Амортизированная сложность - это гарантия полной стоимости любой последовательности операций. Это означает, что независимо от того, насколько вредоносен ваш генератор проблем, вам не нужно беспокоиться о последовательности операций, которые займут гораздо больше времени, чем вы ожидаете.

(В зависимости от алгоритма нетрудно случайно наткнуться на худший случай. Классическим примером является наивная быстрая сортировка, которая очень плохо справляется с преимущественно сортированными входными данными, хотя «средний» случай быстрый).

person comingstorm    schedule 29.01.2014