Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите алогоритм, литературу по решению данной задачи / 25 сообщений из 64, страница 1 из 3
25.08.2011, 09:16
    #37410951
romapost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
подскажите какой лучше всего алгоритм использовать для решения данной задачи, и желательно литературу

Дан массив произвольного размера с числами в пределах от 1 до 1,000,000. В этом массиве все числа уникальные, кроме одного числа, которое повторяется два раза. Найти это число. Решить эту задачу с минимальным использованием процессорного времени.
...
Рейтинг: 0 / 0
25.08.2011, 09:36
    #37410984
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
select i from
(
select i, count(i) n from table1 group by i
)
where n>1


это если лень думать :)
...
Рейтинг: 0 / 0
25.08.2011, 09:38
    #37410987
Гата Селов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
сложить все числа. Потом из полученной суммы вычесть сумму всех чисел от 1 до n. В остатке будет повторяющееся число. Сумму чисел от 1 до эн наити по формуле из школьного учебника.
...
Рейтинг: 0 / 0
25.08.2011, 09:40
    #37410990
Гата Селов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
это если значения не превосходят размерности массива
...
Рейтинг: 0 / 0
25.08.2011, 09:46
    #37411001
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
Если говорить об алгоритме без sql, то я бы предложил следующее:

0) Отсортировать исходный массив.
1) Совершить по отсортированному массиву 1 проход, сравнивая соседние числа между собой...
...
Рейтинг: 0 / 0
25.08.2011, 09:49
    #37411010
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
On 25.08.2011 10:16, romapost wrote:

> *Дан массив произвольного размера с числами в пределах от 1 до 1,000,000. В этом
> массиве все числа уникальные, кроме одного числа, которое повторяется два раза.

На счёт вот "повторяется два раза" -- это как вообще ? Сколько в итоге
экземпляров этого числа в массиве -- два или четыре ? или даже может быть три ?

Товарищь, который формулировал задание, был хитрый.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.08.2011, 09:52
    #37411014
romapost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
Спасибо всем за наводку!

Интересует прежде всего вариант без sql, название метода, и что почитать , я думаю значения могут превышать размерность массива.
...
Рейтинг: 0 / 0
25.08.2011, 09:53
    #37411021
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
On 25.08.2011 10:46, DENIS_CHEL wrote:

> 0) Отсортировать исходный массив.
> 1) Совершить по отсортированному массиву 1 проход, сравнивая соседние числа
> между собой...

Это долго. Это O( (N log N) + N ) как минимум.
Я по крайней мере знаю один способ быстрее это сделать, за O( N ).
Но может кто-то ещё что-то придумает.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.08.2011, 09:53
    #37411022
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
MasterZivСколько в итоге
экземпляров этого числа в массиве -- два или четыре ? или даже может быть три ?

Товарищь, который формулировал задание, был хитрый.


И мое решение и Еноза это корректно отработает... Вопрос в том будет ли это верным ответом на вопрос...

PS Не люблю задачи типа "Докажите что..."
...
Рейтинг: 0 / 0
25.08.2011, 09:56
    #37411032
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
On 25.08.2011 10:53, DENIS_CHEL wrote:

> И мое решение и Еноза это корректно отработает... Вопрос в том будет ли это
> верным ответом на вопрос...

Твоё решение -- вообще никакое, это долго. Хотя конечно решение.
Еноза решение -- не решение вообще. Загружать миллион записей в таблицу БД
только чтобы понять, какое число повторяется -- это бред. Даже твоё решение лучше.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.08.2011, 09:57
    #37411036
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
DENIS_CHELЕсли говорить об алгоритме без sql, то я бы предложил следующее:

0) Отсортировать исходный массив.
1) Совершить по отсортированному массиву 1 проход, сравнивая соседние числа между собой... ограничения только по использованию процессора, а не по памяти.
так что проще:
1) создать второй массив [1..1000000] и в него закидывать элементы первого по индексам.
если перед присваиванием не ноль, значит это и есть искомое неуникальное число.
...
Рейтинг: 0 / 0
25.08.2011, 09:58
    #37411038
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
MasterZivЕноза решение -- не решение вообще. Загружать миллион записей в таблицу БД
только чтобы понять, какое число повторяется -- это бред. про виртуальные талицы слышал?
...
Рейтинг: 0 / 0
25.08.2011, 10:01
    #37411042
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
eNoseDENIS_CHELЕсли говорить об алгоритме без sql, то я бы предложил следующее:

0) Отсортировать исходный массив.
1) Совершить по отсортированному массиву 1 проход, сравнивая соседние числа между собой... ограничения только по использованию процессора, а не по памяти.
так что проще:
1) создать второй массив [1..1000000] и в него закидывать элементы первого по индексам.
если перед присваиванием не ноль, значит это и есть искомое неуникальное число.

Я над этим думал - сортировка подсчетом, но вся прелесть, что нам не надо сортировать до конца:)

Но есть один момент создать массив в 1 000 000 обнулить его то же затратно, в исходной задаче сказано "массив произвольного размера", сортировка 3-х чисел будет быстрее:)
...
Рейтинг: 0 / 0
25.08.2011, 10:02
    #37411043
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
DENIS_CHELЕсли говорить об алгоритме без sql, то я бы предложил следующее:

0) Отсортировать исходный массив.
1) Совершить по отсортированному массиву 1 проход, сравнивая соседние числа между собой...
O(n*ln(n)). Хотя, на самом деле, любое решение будет O(n*ln(n)).

Числа, укладывающиеся в 20 бит. Ограничение на время процессора, но не на память. Хм.
Заводим служебный массив в 2 Mb, инициализируем нулями. Для каждого числа в массиве, если соответствующая ячейка служебного массива ноль, пишем один; если была единица - ура, мы нашли клиента.
Ничего быстрее мне в голову не приходит.
...
Рейтинг: 0 / 0
25.08.2011, 10:03
    #37411049
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
DENIS_CHELНо есть один момент создать массив в 1 000 000 обнулить его то же затратно, в исходной задаче сказано "массив произвольного размера", сортировка 3-х чисел будет быстрее:)
Можно добавить ветку для малых n. Одна проверка погоды не сделает.
...
Рейтинг: 0 / 0
25.08.2011, 10:05
    #37411050
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
AbstractionЧисла, укладывающиеся в 20 бит. Ограничение на время процессора, но не на память. Хм.
Заводим служебный массив в 2 Mb, инициализируем нулями. Для каждого числа в массиве, если соответствующая ячейка служебного массива ноль, пишем один; если была единица - ура, мы нашли клиента.
Ничего быстрее мне в голову не приходит.

Это и есть сортировка подсчетом, выше уже предлагали...
...
Рейтинг: 0 / 0
25.08.2011, 10:09
    #37411055
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
DENIS_CHELНо есть один момент создать массив в 1 000 000 обнулить его то же затратно да, тут даже биты не спасут... 125 тысяч элементов...
...
Рейтинг: 0 / 0
25.08.2011, 11:40
    #37411270
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
eNoseDENIS_CHELНо есть один момент создать массив в 1 000 000 обнулить его то же затратно да, тут даже биты не спасут... 125 тысяч элементов...125000 байт?
копейки, отработает за доли секунды.
...
Рейтинг: 0 / 0
25.08.2011, 11:59
    #37411314
eNose
Участник
[не активирован]
[не одобрен]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
Яростный МечeNoseпропущено...
да, тут даже биты не спасут... 125 тысяч элементов...125000 байт?
копейки, отработает за доли секунды. мож есть менее затратный для проца вариант?
...
Рейтинг: 0 / 0
25.08.2011, 12:08
    #37411339
GrasQtR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
romapost,

Может связный список?
...
Рейтинг: 0 / 0
25.08.2011, 12:15
    #37411360
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
eNose,

Вообще-то, есть System Idle, благодаря которому мы имеем шанс сразу получить обнулённые страницы.

Можно попробовать опереться на другие сортировки. Скажем, поразрядная потребует выделения 64-кратного объёма исходного массива без обнуления и поиск дубликата потребует довести сортировку в среднем до половины, но на таком мелком массиве это не окупается.
Шелл позволит теоретически найти дубликат на больших списках (а Хоар, соответственно, обнаружить равенство разделяющему элементу), но вероятность этого меньше 1/2.

Исходный массив обладает тем свойством, что его элементы не нули и XOR любой пары элементов кроме искомых не ноль. Интересно, можно ли за это зацепиться?
...
Рейтинг: 0 / 0
25.08.2011, 12:16
    #37411361
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
GrasQtRМожет связный список?
А нафига?
...
Рейтинг: 0 / 0
25.08.2011, 12:19
    #37411367
DENIS_CHEL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
GrasQtRromapost,

Может связный список?

Городить этот огород еще хуже сортировки...
...
Рейтинг: 0 / 0
25.08.2011, 12:24
    #37411382
Panshin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
Это очень просто без всякого алгоритма, если подумать. Если число одно и повторяется только один раз, то сложи числа от 1 до миллиона, потом сложи данную последовательность чисел и от второго отними первое. Получишь число, которое повторилось.
...
Рейтинг: 0 / 0
25.08.2011, 12:28
    #37411389
GrasQtR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите алогоритм, литературу по решению данной задачи
PanshinЭто очень просто без всякого алгоритма, если подумать. Если число одно и повторяется только один раз, то сложи числа от 1 до миллиона, потом сложи данную последовательность чисел и от второго отними первое. Получишь число, которое повторилось.

В задаче написано: массив произвольного размера, не сказано что числа будут идти строго по порядку.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подскажите алогоритм, литературу по решению данной задачи / 25 сообщений из 64, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]