|
|
|
Как найти число
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Уверен. Специально перечитал =) This class offers constant time performance for the basic operations (add, remove, contains and size) Если я правильно перевел с вражеского, конечно =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:10:56 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoft пишет: > Скорость выполнения операций добавления ... фиксирована > > Вы в этом уверены? ссылка на доку есть? Да, это так. Только я не понял, какую юный падаван решал задачу, и, если ту, которую я думаю, как он её решил. В смысле, там неправильно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:13:28 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Варант с битовой картой тогда логичнее... Или сделать второй массив...размерностью до M Прогоняя исходный в цикле, ставим 1-ку по индексу, равному значению элемента. Если потом встречается равный, все, приехали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:15:14 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv miksoft пишет: > Скорость выполнения операций добавления ... фиксирована > > Вы в этом уверены? ссылка на доку есть? Да, это так.Тогда похоже на O(N). MasterZivТолько я не понял, какую юный падаван решал задачу, и, если ту, которую я думаю, как он её решил. В смысле, там неправильно. Что именно неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:18:05 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже?Варант с битовой картой тогда логичнее... Или сделать второй массив...размерностью до M Прогоняя исходный в цикле, ставим 1-ку по индексу, равному значению элемента. Если потом встречается равный, все, приехали.То, что вы описываете - и есть битовая карта. Почему "или" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:20:48 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv Только я не понял, какую юный падаван решал задачу, и, если ту, которую я думаю, как он её решил. В смысле, там неправильно. Я вот тоже не вижу косяков, кроме того, что в цикле прохода по массиву вместо ELEMENTS_COUNT жестко забито 100 000. Буду весьма признателен MasterZiv, если он укажет в чем я не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:23:54 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoft, да просто рамером. Не ругайте сильно, я тоже падаван, и я имел в виду лишь порядок действий) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:26:53 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже?miksoft, да просто рамером. Не ругайте сильно, я тоже падаван, и я имел в виду лишь порядок действий) для данной задачи не требуется индексировать ряд чисел, так что одного бита на число (битовой карты) достаточно. Поражают только размеры - 536870912 байт для любых 32-битных чисел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:45:18 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже?miksoft, Не ругайте сильно, я тоже падаван Тебя еще не приняли в падаваны ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:46:35 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Очень юный падаван, Подождем Йоду... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:48:13 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
гдеже? Подождем Йоду... Главное, что бы пришел Йода, а не Энакин из третьей части =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 13:50:52 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
учебные примеры на Pascal Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 14:13:00 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlusучебные примеры на Pascal Похоже, это решается какой-то частный случай обсуждаемой задачи, довольно ограниченный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 14:24:35 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoftAlexandrPlusучебные примеры на Pascal Похоже, это решается какой-то частный случай обсуждаемой задачи, довольно ограниченный. по задаче N = M+1 и тогда шоб красиво - так может быть Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:11:26 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus, например, в приведенном строго просматривается условие N >= M, а такого в условиии нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:11:31 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus...по задаче N = M+1 и тогда шоб красиво - так может быть Код: plaintext 1. 2. 3. 4. если это к задаче, которую для прикола привел я, то там никаких перестановок не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:14:43 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
дописать для "танкистов": искомое число будет в m[0] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:16:21 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
vinoAlexandrPlus...по задаче N = M+1 и тогда шоб красиво - так может быть Код: plaintext 1. 2. 3. 4. если это к задаче, которую для прикола привел я, то там никаких перестановок не нужно так и в этой другого N не может быть ничего не переставляет - указатели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:20:21 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
В задаче за наименьшее "математическое" время - то есть перестановки в том времени. Так наверное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:28:42 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus, очевидно, что когда N = M+1, задача вырождается в расчетную: искомое число = сумма элементов -сумма арифметической последовательности (1,2,..,M) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:46:59 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus[quot vino][quot AlexandrPlus]...так и в этой другого N не может быть... здесь как раз N <= M и только поиском можно найти искомое число ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 15:51:01 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoft пишет: > Тогда похоже на O(N). Похоже, похоже. Только программа неправильная. > > MasterZiv > Только я не понял, какую юный падаван решал задачу, и, если > ту, которую я думаю, как он её решил. В смысле, там неправильно. > > Что именно неправильно? Ну я не увидел там поиска уже найденного и выхода, в случае если он уже найден. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:02:56 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
vinoAlexandrPlus[quot vino][quot AlexandrPlus]...так и в этой другого N не может быть... здесь как раз N <= M и только поиском можно найти искомое число тады, чтобы приладить алгоритм - можно расширить массив N до M+1, заполнив нулями, и когда в m[0] или по порядку следования в m встретится 0, то просто брать в m[0] следующие число по порядку ОДНОГО прохода по m при этом остаемся в "линейном" времени P.S. Хотя есть память ограничена, то - не пройдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:18:48 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZivНу я не увидел там поиска уже найденного и выхода, в случае если он уже найден. Вот же:Очень юный падаван if((s = set.size()) == size){ doubleValue = array[i]; break; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:29:12 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Очень юный падаванУверен. Специально перечитал =) This class offers constant time performance for the basic operations (add, remove, contains and size) Быть такого не может, просто потому что такого не может быть (теория информации вещь суровая, и против нее не попрешь, даже с джавой за пазухой). А еще там есть приписка: " assuming the hash function disperses the elements properly among the buckets. ". Код: 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. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:31:07 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlusvinoAlexandrPlus[quot vino][quot AlexandrPlus]...так и в этой другого N не может быть... здесь как раз N <= M и только поиском можно найти искомое число тады, чтобы приладить алгоритм - можно расширить массив N до M+1, заполнив нулями, и когда в m[0] или по порядку следования в m встретится 0, то просто брать в m[0] следующие число по порядку ОДНОГО прохода по m при этом остаемся в "линейном" времени P.S. Хотя есть память ограничена, то - не пройдет. вот-вот, поэтому и нужна БИТОВАЯ карта, ее размер будет минимален перестановка, на самом деле, не считается дешевой операцией, и к тому же Вы захотели дополнительное условие проверять (на =0) а то,что выделено, может привести к зацикливанию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:32:53 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus...можно расширить массив N до M+1, заполнив нулями, и... вот главная идея - тогда, похоже, можно применить расчетную формулу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:38:13 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
точнее, я глюканул, - там же не будет последовательности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:40:47 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#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. Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:43:32 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
> Очень юный падаван > if((s = set.size()) == size){ > doubleValue = array[i]; > break; Вот я и не понял, при чём тут размер какой-то. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:44:46 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
junior idiot пишет: > такие ситуации обычно и возникают, потому и написали "линейное", но это > нифига не значит что миллион любых чисел можно так взять и вставить в > этот хешсет так же быстро как в массив. Время -- линейное, но алгоритм не обладает в общем случае статистической устойчивостью. Т.е. иногда может срываться. Хорошо, что ты кстати это знаешь. Многие тупо думают что скорость поиска в хэш-таблице - строго константа. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:47:05 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Можно обратиться к массиву как к таблице через соответствующий SQL запрос. Можно вместо массива использовать тот же словарь из библиотеки scripting (он не пропустит дупликат).... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:50:59 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv > Очень юный падаван > if((s = set.size()) == size){ > doubleValue = array[i]; > break; Вот я и не понял, при чём тут размер какой-то. как я понял - если размер множества не изменился, то последнее вставленное число в нем уже было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 16:52:31 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
vinoAlexandrPlusvinoAlexandrPlus[quot vino][quot AlexandrPlus]...так и в этой другого N не может быть... здесь как раз N <= M и только поиском можно найти искомое число тады, чтобы приладить алгоритм - можно расширить массив N до M+1, заполнив нулями, и когда в m[0] или по порядку следования в m встретится 0, то просто брать в m[0] следующие число по порядку ОДНОГО прохода по m при этом остаемся в "линейном" времени P.S. Хотя есть память ограничена, то - не пройдет. вот-вот, поэтому и нужна БИТОВАЯ карта, ее размер будет минимален перестановка, на самом деле, не считается дешевой операцией, и к тому же Вы захотели дополнительное условие проверять (на =0) а то,что выделено, может привести к зацикливанию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ничего не зацикливается - и один проход (i) перестановка (изменение указателей) вообще не дешевая, но речь идет о "математическом" времени ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 17:06:49 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
VladConnМожно обратиться к массиву как к таблице через соответствующий SQL запрос. В "математическом" времени SQL-запрос в общем случае - комбинаторный перебор ведь, да ещё будет декартово произведение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 17:26:03 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
AlexandrPlus Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. один проход - слишком оптимистично сказано, так как ячейки, наполненные нулями, тоже начнут проверяться, а это уже не N ячеек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 17:31:04 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#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. Ну понятно, твой HashTable будет занимать меньше места в памяти. Ну ты вроде на память забил и делал упор на быстродействие. Так этот вариант ещё и побыстрее будет, бо хэши то вычислять нэ трэба... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 18:39:22 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
miksoft пишет: > как я понял - если размер множества не изменился, то последнее > вставленное число в нем уже было. Вау, какие полёты мыслей ! А я и недопёр ! А по-простому нельзя было ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 18:58:46 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
mikhail_n пишет: > Зив, а чем принципиально с точки зрения скорости работы отличается твой > код на жабе от такой простой лабуды: В общем-то ничем, если не учитывать, что твой код не работает (не инициализируется массив buffer[M]). А так -- массив -- частный случай хэш-таблицы. Только памяти жрёт больше, как ты и заметил. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 19:01:58 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
vinoAlexandrPlus, очевидно, что когда N = M+1, задача вырождается в расчетную: искомое число = сумма элементов -сумма арифметической последовательности (1,2,..,M) А мне подумало - вспоминая то, когда в ВУЗе программировали голые процессоры - программа из 0 и 1: то есть программируя, невольно думаешь как машина Тьюринга - вычисления гораздо более затратны, чем сравнения ячеек и смещения с ячейки на ячейку. А генетические алгоритмы - для задач оптимизации оказываются более эффективны, чем расчетные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2009, 21:32:16 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
alusovПодскажите правильный алгоритм. Дан массив размера N из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза. Как найти число за наименьшее время. Хм... По-моему, условие несколько неполное. Не раскрыто какие вспомогательные структуры данных разрешается использовать массивы, множества, либо, вообще, задача должна быть решена "на месте" без затрат памяти, т.е. используя только исходные данные ну и миниум переменных(индексы, буфер и прочее). В случае решения "на месте" думаю только сортировка поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 03:33:06 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
грешок есть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 05:43:14 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv Вау, какие полёты мыслей ! А я и недопёр ! А по-простому нельзя было ? Ну, мы уже выяснили, что на добавление уходит время, зависящее от количества элементов. Думаю, что время поиска элемента имеет ту же зависимость. А вот проверка размера, имхо, есть операция по времени фиксированная и более дешевая =) Собственно, руководствовался только этими соображениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 12:00:35 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
Очень юный падаван пишет: > Ну, мы уже выяснили, что на добавление уходит время, зависящее от > количества элементов. Думаю, что время поиска элемента имеет ту же Во-первых, вставка в хеш-таблицу -- те же O(1). Во-вторых, тебе вставлять-то в таблицу всё равно надо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 12:42:58 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv Во-первых, вставка в хеш-таблицу -- те же O(1). Во-вторых, тебе вставлять-то в таблицу всё равно надо. Я просто объяснял, почему проверял размер, а не делал проверку вхождения элемента в множество. То, что элемент в множество надо вставить - даже не обсуждается. А вот проверить размер - дешевле чем найти вхождение элемента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 12:46:59 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#18+
MasterZiv Очень юный падаван пишет: > Ну, мы уже выяснили, что на добавление уходит время, зависящее от > количества элементов. Думаю, что время поиска элемента имеет ту же Во-первых, вставка в хеш-таблицу -- те же O(1). Во-вторых, тебе вставлять-то в таблицу всё равно надо. Он делает add + проверку размера, это вдвое дешевле, чем contains + add, если только HashSet не кэширует findPos(), а он его, судя по найденным исходникам, не кэширует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2009, 12:49:02 |
|
||
|
Как найти число
|
|||
|---|---|---|---|
|
#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. Ответы на 1 (поиск нулевых битов) и 3-е задания (поиск дубликатов файлов) у мну тоже есть, могу выложить. Один хрен не взяли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2009, 13:41:37 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1344191]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
202ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
106ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 578ms |

| 0 / 0 |
