2015-07-02 2 views
0

Я пытаюсь узнать сложность времени с помощью алгоритмов. Я нашел эту проблему интересной, которая гласит: «Найти пары с данной разницей». Я понимаю проблему и сужу до двух методов, которые:Путаница с временной сложностью в «Найти пару с заданной разницей»

1. Using Binary search (Time complexity: O(nLogn) in worst case) 
2. Use hash (Time comlexity: O(n), Space complexity : O(n)) 

Пожалуйста, кто-нибудь может объяснить, какой из них лучше реализовать. Благодарю.

В случае ссылки я имею в виду эту проблему: http://www.geeksforgeeks.org/count-pairs-difference-equal-k/

+0

Лучше, в каком смысле? – Renzo

+0

Уммм извините, но ваш вопрос совершенно бессмыслен, если вы не дадите оценку «лучше реализовать». Как вы это определяете? Также я не думаю, что данная сложность хороша. – luk32

+0

@ luk32 - Сравнивая приведенные выше случаи, когда временная сложность O (n), но необходимо рассмотреть пространство и O (nLogn). Благодаря!! – deep

ответ

2

Пожалуйста, может кто-то объяснить, какой из них лучше реализовать.

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

  1. Если память очень ограничена, или поток элементов очень велико (скажем, это на файле размером 10GB), решение хеширования становится неосуществимым, так как вы не можете сохранить его не- память и решение сортировки + бинарный поиск становится более привлекательным.
  2. Если вам требуется самое быстрое среднее время для больших массивов, и у вас столько памяти, сколько вы хотите - хешинговое решение становится более привлекательным из-за средней сложности времени O(n).
  3. Если ваше приложение работает в режиме реального времени, и вы не можете себе это позволить, то в любом случае это займет O(n^2), независимо от того, насколько мала вероятность - он сломает вашу компанию. Поскольку хеширующее решение распадается на O(n^2) в худшем случае (очень редкий случай), вы захотите его избежать, и снова - сортировка становится более привлекательной.
  4. Поскольку обе они относительно эффективны, и если нет реальных ограничений (это, вероятно, 99% случаев), тот, который будет проще реализовать и поддерживать, тот, который вы должны предпочесть.
+0

Не могли бы вы объяснить # 3 еще немного? Является ли OP неправильным, говоря, что решение сортировки является «O (n log n)» наихудшим случаем? – StriplingWarrior

+1

@StriplingWarrior № Сортировка строгая 'O (nlogn)' наихудший случай. Хеширование - это «O (n)» средний случай, с очень редким «O (n^2)» наихудшим случаем. Я вижу ваше замешательство - извините, что небольшая ошибка изменила «сортировку распадов на O (n^2)» на «распады хеширования до O (n^2)» - это то, что я намеревался в первую очередь – amit

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