|
|
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Подскажите правильный алгоритм. Дан массив размера N из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза. Как найти число за наименьшее время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 17:49:15 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
отсортировать массив, тогда одинаковые числа будут идти подряд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 18:10:05 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Можно использовать битовую карту, если диапазон целых чисел невелик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 20:56:31 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
mayton, битовая карта слишком дорого, проще сортировка подсчетом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 22:03:51 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
blindedmayton, битовая карта слишком дорого, проще сортировка подсчетом Обоснуй ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 22:32:14 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
mayton пишет: > mayton, битовая карта слишком дорого, проще сортировка подсчетом > > > Обоснуй Вы похоже совсем зарапортовались. Какая сортировка? Сортировка -- это уже O( N log N ) А тут решается за линейное время O( N ) всё. За один просмотр массива. А я кстати этот вопрос знаю. И знаю, где его задают. Posted via ActualForum NNTP Server 1.4 Модератор: Тема перенесена из форума "C++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 23:02:31 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZivА я кстати этот вопрос знаю. И знаю, где его задают.Этот вопрос много где задают. Известный баян, на sql.ru частенько встречался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 23:12:27 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
авторЗа один просмотр массива Что, и для случая когда шаг между двумя последовательными числами в ОТСОРТИРОВАННОЙ последовательности от 1 до М является совершенно случайной величиной? Было б интересно взглянуть на такое решение. Не томи, покажь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 00:49:53 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
mikhail_n, А причем тут "шаг между двумя последовательными числами в ОТСОРТИРОВАННОЙ последовательности"? Главное, чтобы памяти хватило на массив размера M бит, а шаг между числами, имхо, никакой роли не играет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 02:30:01 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoft, сказано уже было - массив целых чисел. Памяти на это надо для int32 чуть больше полугигабайта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 03:03:59 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
авторГлавное, чтобы памяти хватило на массив размера M бит, а шаг между числами, имхо, никакой роли не играет. Ну, с использованием доп. памяти - ни вапрос. Но я так понял что Зив знает как получить результат не используя дополнительные массивы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 03:47:21 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv А я кстати этот вопрос знаю. И знаю, где его задают. И где, если не секрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 09:29:53 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже? пишет: > И где, если не секрет? Не скажу. На счёт дополнительной памяти -- дело не в её наличии, а в скорости поиска по этой дополнительной структуре. Если её делать линейной, то результат работы всего алгоритма будет O(N**2). Если логарифмической, то будет O( N*log N ). А в идеале можно сделать за O( N ). Вот как -- и думайте. посмотрим, какие вы джедаи Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 10:46:55 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Чисто хз, на скорую руку, в анализе не силен( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 11:34:51 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Экзамен в школу падаванов? Забавно =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 11:39:09 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
alusovПодскажите правильный алгоритм. Дан массив размера N из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза. Как найти число за наименьшее время. Вспоминается похожая прикольная задачка, где "Дан массив размера M+1 из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 11:40:38 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Пока еще садик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 11:41:44 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
через set в STL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 12:00:26 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже? пишет: > bool found = false; > for ( iter = arr.begin(); iter != arr.end(); ++iter ){ > for ( iterScnd = iter + *1*; iterScnd != arr.end(); ++iterScnd ) > if ( *iterScnd == *iter ){ > cout << *iter << endl; > found = true; > break; > Чисто хз, на скорую руку, в анализе не силен( Это -- O( N**2 ), это не интересно, а интересно O( N ). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 12:05:34 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Случайно к вам попал =) Но прям даже интересно стало. А как оцените такой код? Это джава, пугаться не надо. final int ELEMENTS_COUNT = 100000; int doubleValue = -1; int[] array = new int[ELEMENTS_COUNT]; Set set = new HashSet<Integer>(); for(int i = 0; i<ELEMENTS_COUNT-1; i++){ array[i] = i; } array[ELEMENTS_COUNT-1] = 1; int size = set.size(); long startTime = System.currentTimeMillis(); // Все интересное тут: for(int i = 0; i<100000; i++){ set.add(array[i]); int s; if((s = set.size()) == size){ doubleValue = array[i]; break; }else{ size = s; } } long endTime = System.currentTimeMillis(); System.out.println("Works: " + (endTime - startTime) + ", value: " + doubleValue); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 12:42:57 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZivНа счёт дополнительной памяти -- дело не в её наличии, а в скорости поиска по этой дополнительной структуре. Если её делать линейной, то результат работы всего алгоритма будет O(N**2). Если логарифмической, то будет O( N*log N ). А в идеале можно сделать за O( N ). Вот как -- и думайте. посмотрим, какие вы джедаи а чего думать-то? mayton еще с самого начала сказал про битовую карту, про что Вы сами сказали "решается за линейное время O( N )" (если я правильно понял цитирование). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 12:46:45 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Очень юный падаванСлучайно к вам попал =) Но прям даже интересно стало. А как оцените такой код? Это джава, пугаться не надо. for(int i = 0; i<100000; i++){ set.add(array[i]); Зависит от структуры хранения set и от внутренней реализации add. Перепишите этот момент алгоритмически, чтобы было понятно тем, кто джаву не знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 12:53:33 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Смысл множества - хранение объектов в единственном экземпляре, реализовано через хеш-функцию (в данном случае). Скорость выполнения операций добавления и получения размера фиксирована (какова она - зависит от вашей машины, сколько там операций - сказать не берусь, так глубоко не копал). Смысл в том, что бы проверить, увеличится ли размер множества, если добавить туда элемент массива. Если такой элемент был добавлен раньше - не увеличится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:01:31 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Очень юный падаванСкорость выполнения операций добавления ... фиксированаВы в этом уверены? ссылка на доку есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:03:33 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36079354&tid=1344191]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
204ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 214ms |
| total: | 530ms |

| 0 / 0 |
