1

Предположим, что вы реализуете кучу, используя массив, и каждый раз, когда массив заполнен, вы копируете его в массив размером в два раза. Какова суммарная временная сложность (для наихудшего случая) вставки элементов в кучу?Какова суммарная временная сложность вставки элемента в эту структуру?

Я думаю, что у нас есть T(n) = n * n (что является верхней границей общей стоимости последовательности n операций в худшем случае), а затем амортизированная сложность по одной формуле равна T(n)/n = n^n/n = n.

Но я думаю, что это очень неправильно, потому что из интуиции очень ясно, что я должен получить log(n) или ниже ... Так как я должен рассчитать это?

+1

Offtopic. Не вопрос программирования. Попробуйте http://cs.stackexchange.com –

+1

Почему? Здесь есть тег для структур данных и много подобных вопросов. Я думаю, вы ошибаетесь. –

ответ

2

Представьте, что вы вставляете n элементов в кучу, представленную таким образом. Существует два разных источника затрат, которые необходимо учитывать:

  1. Стоимость операций кучи, игнорируя базовую матрицу, изменяется.
  2. Стоимость массива изменяет размеры, игнорируя общие операции кучи.

Стоимость (1) равна O (n log n) по n суммарным операциям, так как каждая вставка кучи занимает время O (log n).

За счет (2) обратите внимание, что работа, выполняемая для удвоения размера массива, прямо пропорциональна размеру массива в то время, когда он удваивается. Это означает, что вы сделаете 1 единицу работы, чтобы удвоить массив из размера 1, 2 единицы работы, чтобы удвоить массив из размера 2, 4 единицы работы, чтобы удвоить массив размером 4 и т. Д. Это означает, что общая сумма работа равна

1 + 2 + 4 + 8 + 16 + ... + 2 + 1 войти п ≤ 4n - 1 = о (п)

Этот математике использует тот факт, что вы удваиваете массив не более 1 + log n раз, прежде чем он встанет до размера n и что 1 + 2 + 4 + 8 + ... + 2 k = 2 k + 1 - 1. Это означает, что во всех n вставках вы выполняете O (n), удваивая массив.

В целом, общая работа, выполняемая над n операциями, - O (n log n), поэтому амортизированная стоимость за операцию равна O (log n).

+0

Единственная часть, с которой я не согласен (или не понимаю), это '<= 4n-1'. Пример, начальный размер массива 1, размер конечной матрицы 16. Элементы перемещены 1 + 2 + 4 + 8 = 15. Или начальный размер 32, окончательный размер 256. Элементы перемещены 32 + 64 + 128 = 224. Так что кажется, '<= n-1'. – user3386109

+0

Я понимаю, что стоимость изменения размера O (n). Мой вопрос в том, какова формула для расчета амортизированной временной сложности? И что означает амортизированная временная сложность ** для наихудшего случая **? –

+0

@ user3386109 Так как все выходит на O (n), я просто даю хорошую и свободную верхнюю границу. – templatetypedef

Смежные вопросы