Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 Быстрый алгоритм для поиска двух одинаковых
Даны числа $\{a_1, a_2, \ldots\ , a_n\}$.
Необходимо ответить, есть ли среди них два одинаковых числа за время $O(n\times\log(n))$.

Задача прямо из первой темы учебника, а я сразу задумался.

 Posted automatically
Аватара пользователя
 i  Тема перемещена из форума «Помогите решить / разобраться (М)» в форум «Карантин»
Причина переноса: формулы не оформлены ТеХом

Оформите формулы ТеХом. Инструкции по оформлению формул здесь или здесь (или в этом видеоролике).
После исправлений сообщите в теме Сообщение в карантине исправлено, и тогда тема будет возвращена.

 Posted automatically
Аватара пользователя
 i  Тема перемещена из форума «Карантин» в форум «Помогите решить / разобраться (М)»
вернул
формулы поправил - наведите мышкой и посмотрите, как оформлять формулы.
Для возврата темы следует писать сюда

 Re: Быстрый алгоритм для поиска двух одинаковых
Указание: если бы было дополнительно известно, что список отсортирован, то за какое время решалась бы задача?
Кстати, это вопрос не для математического, а скорее для программистского форума.

 Re: Быстрый алгоритм для поиска двух одинаковых
kirill94, а что вообще можно сделать за $O(n\log(n))$?

 Re: Быстрый алгоритм для поиска двух одинаковых
Бинарное дерево наверное имеют ввиду.

 Re: Быстрый алгоритм для поиска двух одинаковых
Аватара пользователя
Зачем так сложно, с деревом?
Если последовательность чисел упорядочена, место их в последовательности зависит от их значения. Где могут быть расположены два одинаковых числа?

 Re: Быстрый алгоритм для поиска двух одинаковых
Евгений Машеров, если последовательность упорядочена, то её можно просто пробежать за $O(n)$... а вот упорядочить её как раз можно за $O(n\log(n))$ любым известным способом.

 Re: Быстрый алгоритм для поиска двух одинаковых
Аватара пользователя

(Оффтоп)

Спасибо, товарищ капитан!

 Re: Быстрый алгоритм для поиска двух одинаковых
Аватара пользователя
Верно вопрос скорее всего по программированию...

Если величины $a_i$ ограничены, например так: $a_i \in [A..B]$, то поиск можно выполнить за $O(n)+B-A+1$.

При чтении данных заполняем массив $[A..B]$, если прочитали $a_k$ то увеличиваем на 1 элемент $a_k$. После достаточно "пробежать" весь массив $[A..B]$ и проверить есть ли в нем хотя бы одно число более 2, следовательно в исходном множестве присутствуют как минимум два одинаковых элемента.

 Re: Быстрый алгоритм для поиска двух одинаковых
Что-то я не понял. $a_n = \sin n$. Что мы пробегаем и что увеличиваем?

 Re: Быстрый алгоритм для поиска двух одинаковых
Аватара пользователя
Имелось в виду - если числа целые.
Была другая похожая простая задача, только наоборот: дан набор чисел, в котором каждое число, кроме какого-то одного, встречается дважды. Найти это единственное неодинаковое.

 Re: Быстрый алгоритм для поиска двух одинаковых
XOR?

 Re: Быстрый алгоритм для поиска двух одинаковых
Аватара пользователя
Естественно.

 [ Сообщений: 14 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group