2014 dxdy logo

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

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




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

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

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

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

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

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

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

 
 
 
 Re: Быстрый алгоритм для поиска двух одинаковых
Сообщение02.02.2013, 10:43 
Бинарное дерево наверное имеют ввиду.

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

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

 
 
 
 Re: Быстрый алгоритм для поиска двух одинаковых
Сообщение03.02.2013, 08:40 
Аватара пользователя

(Оффтоп)

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

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

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

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

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

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

 
 
 
 Re: Быстрый алгоритм для поиска двух одинаковых
Сообщение05.02.2013, 08:17 
XOR?

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

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


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