0

Я пытаюсь выяснить, как вычислить O (п) для следующего случая:Вычисление О (п) для hasmap против двоичного поиска

Учитывая отсортированный массив, как бы вы найти два числа, сумма которых равна равное заданному числу x в O (n)?

(п) раствор

Уплотнительное будет:

  1. Удалить первый элемент массива (E0)
  2. Добавить это в HashMap
  3. Удалить первый элемент массива (e1)
  4. Целевая разница между e1 и х
  5. Если цель существует в хэш-карта вернуть пары
  6. Добавить e1 в HashMap
  7. Повторите шаги 3-6 до тех пор, пока не найдете пару или запустить из элементов

Это будет худший случай O (N), как вам нужно только один проход по массиву.

Уплотнительного (п * войти п) решение будет:

  1. Удалить первый элемент из массива (e1)
  2. Задача представляет собой разность между первым элементом и х
  3. двоичного поиском остальная часть массива для целевого
  4. Если он существует возврата пары
  5. Повторите шаги 1-4, пока не найдете пару или запустить из элементов

Это O (n log n), так как вам нужно запустить двоичный поиск (log n) в худшем случае n/2 раза, давая O (n/2 * log n), который в больших O равен O (n * log n)

Это правильно?

+1

Удаление элемента из массива может быть O (N), в зависимости от того, какой язык/библиотека вы используете, поэтому, вероятно, лучше просто оставить элементы в массиве, иначе ваше время работы будет умножено на O (N). – Simon

+0

Ya, указатель определенно был бы лучше, спасибо за предложение – amay0048

ответ

2

Да, для обоих алгоритмов анализ ur правильный.

Ваш первый алгоритм использует O (n) пространство также, coz из hashmap. U может избежать этого.

Algo : 
1. Consider begin = 0, and end = last_index 
2. Consider data[begin] and data[end] 
3. If data[begin] + data[end] > req_sum: 
     end=end - 1 // u need to decrease ur total sum 
    elif data[begin] + data[end] < req_sum: 
     begin = begin + 1 // u need to increase ur total sum 
    elif data[begin] + data[end] == req_sum: 
      print("found") 
4. Continue from Step 2. 

Очевидно избежать случая, когда end < begin и другие случаи угловыми.

+1

Я действительно верю, что вы решаете домашнее задание OP ... – einpoklum

+0

Я просто предлагаю ему другой алгот для проблемы.Его hw - доказательство сложности времени для альгос, упомянутых в вопросе, чего я не делал. :) –

+1

На самом деле я сам программист, поэтому это больше для интереса. Делал некоторые конкурентные программы, а также оптимизацию алгоритмов, поэтому я пытаюсь обернуть голову вокруг сложности во времени, прочитав Википедию и посмотрев YouTube. Это здорово получить некоторую обратную связь, потому что у меня нет листа ответов :-) – amay0048

1

Это звучит как проблема с заданием домашнего задания в определенном курсе, который вы принимаете. Я не буду решать это для вас - хотя достаточно легко найти решение в Интернете, но я скажу вам, что я на 99% уверен, что ваше решение должно занять время O (n), как наихудшая сложность. Решения на основе хэшей берут только O (1) раз за поиск в среднем.

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

  • Нет связанных вопросов^_^