Я пытаюсь выяснить, как вычислить O (п) для следующего случая:Вычисление О (п) для hasmap против двоичного поиска
Учитывая отсортированный массив, как бы вы найти два числа, сумма которых равна равное заданному числу x в O (n)?
(п) растворУплотнительное будет:
- Удалить первый элемент массива (E0)
- Добавить это в HashMap
- Удалить первый элемент массива (e1)
- Целевая разница между e1 и х
- Если цель существует в хэш-карта вернуть пары
- Добавить e1 в HashMap
- Повторите шаги 3-6 до тех пор, пока не найдете пару или запустить из элементов
Это будет худший случай O (N), как вам нужно только один проход по массиву.
Уплотнительного (п * войти п) решение будет:
- Удалить первый элемент из массива (e1)
- Задача представляет собой разность между первым элементом и х
- двоичного поиском остальная часть массива для целевого
- Если он существует возврата пары
- Повторите шаги 1-4, пока не найдете пару или запустить из элементов
Это O (n log n), так как вам нужно запустить двоичный поиск (log n) в худшем случае n/2 раза, давая O (n/2 * log n), который в больших O равен O (n * log n)
Это правильно?
Удаление элемента из массива может быть O (N), в зависимости от того, какой язык/библиотека вы используете, поэтому, вероятно, лучше просто оставить элементы в массиве, иначе ваше время работы будет умножено на O (N). – Simon
Ya, указатель определенно был бы лучше, спасибо за предложение – amay0048