|
|
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. Мне не нравятся выделенные проверки в начале цикла. Конечно, можно было бы реализовать цикл следующим образом Код: plaintext 1. [i=j] нотация Айверсона, её будет реализовывать любая функция, либо очевидное i==j. Но от проверок я всё равно не уйду (хотя небольшой оптимизации я всё-таки вероятно добьюсь). Я рассмотрел такой случай: у нас есть массив a содержащий n элементов. Нужно найти минимум(или индекс минимума) в этом массиве, обойдя массив по все индексам, за исключением индекса i1. вот что у нас получится Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. а ниже очевидная оптимизация(как мне показалось) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. следующая задача, это обход массива a по всем индексам за исключением массива индексов excepts, т.е. получаем запрос WHERE ID NOT IN(excepts). Как бы я её решал, наверное упорядочил бы массив excepts, а затем написал бы какой-нибудь генератор кода формирующий циклы аналогичные 2 циклам выше. Мне кажется такое вполне возможно реализовать. Это верно ? Но мне кажется что есть решение лучше предложенного. Как вы решаете аналогичные задачи ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 09:49 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо мне кажется что есть решение лучше предложенного. Как вы решаете аналогичные задачи ? На дворе, как никак, второе десятилетие двадцать первого века, процессоры давно многоядерные, поэтому само собой напрашивается распараллеливание какого-нибудь цикла (это уже, так сказать, условный рефлекс). Если говорить об оптимизации вычислений, то сразу возникают мысли о SIMD и расчётах на видеокартах. Вопрос только: нужно ли? Стоят ли затраты времени на программирование экономии микросекунд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 13:35 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
В задаче сказано что N<=100. Тоесть в наихудшем случае мы будем иметь поиск минимального цикла длиной 3 в нагруженном графе с 100 вершинами. Условие немного облегчается тем что Штирлиц стартует с строго одной вершины. Далее есть невнятное ограничение. Оно прописано в тексте условия. Штирлиц проходит 3 ребра (и 3 вершины). Вроде так понял. У Штирлица есть хобби - он любит воскресным утром выйти из дома, сесть в машину, выбрать какой-нибудь кольцевой маршрут, проходящий ровно по трем площадям (то есть сначала он едет с какой-то площади на какую-то другую, потом - на третью, затем возвращается на начальную, и опять едет по этому маршруту). Есть еще одно упрощение. Для 3-х вершинного цикла мы можем "бросать" размещения "троек" в любом порядке. Если-бы Штирлиц искал 4-х вершинный цикл то порядок был бы важен для оценки веса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 14:29 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
mayton, Меня поражает не это, а то, как любят авторы этого шизонутого сайта acmp.ru запудрить мозги своими идиотскими условиями задач. Задача-то найти во взвешенном графе наименьший замкнутый путь (цикл) из всех циклов через три вершины. Первый абзац на их странице можно вообще просто стререть без какого-то ни было вреда для понимания. И тем не менее, после прочтения их текста остаётся недопонимание. Как так можно делать задачи -- не понятно. Какие-то недопедагоги-маразматики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 15:18 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Сама по себе задача - неплохая. Но формулировка убобищная. Многобукв. Избыточно. Вобщем бедные участники олимпиад не столько борются с алгоритмом сколько вынуждены консультроваться по поводу смыслов и толкований. Гуманитарщина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:30 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Это как? На всякий случай? Для аэрокосмонавтики? По теории надёжности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 16:45 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Саш. Здесь совершенно не раскрыты идеи Динамического программирования. Крутить три вложенных цикла может любой первокурсник. А ты попробуй решить задачу в общем случае. Представь себе что Штирлиц по четвергам обходит не три а 4, 5... и более площадей. До 100. Параметрически. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Такой хардкод неинтересен. Впечку его... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 17:42 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: sql 1. 2. 3. 4. Пятница, вечер, не понял суть задачи, но это бросилось в глаза. Зачем этот if() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 19:47 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Двойная надёжность системы ИМХО. Электроны "шумят" в кристаллах железа. Вдруг один проскочит. Битик перевернётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 19:56 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
maytonДвойная надёжность системы ИМХО. Не, бери выше, повышение энтропии Вселенной ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 19:57 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Эфир "дует". Порывами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2014, 19:58 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Dima TSashaMercury Код: sql 1. 2. 3. 4. Пятница, вечер, не понял суть задачи, но это бросилось в глаза. Зачем этот if() ? Он не нужен, это моя ошибка. Дело в том, что сначала я делал цикл до n, а потом решил оптимизировать, но забыл убрать проверку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 15:55 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
mayton Код: plaintext 1. 2. Это как? На всякий случай? Для аэрокосмонавтики? По теории надёжности? Когда я объявляю объект типа структуры, и выделяю память(или перевыделяю) по полю этого объекта, мне нужно установить значение указателя в NULL. Потому я думал что тут тоже нужно(на всякий случай). Это единственный момент в указателях, что я не до конца понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 15:57 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Подумаю над алгоритмом в общем случае. А как же оптимизация прохода по массиву за исключением массива индексов ?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2014, 15:59 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПодумаю над алгоритмом в общем случае. А как же оптимизация прохода по массиву за исключением массива индексов ?) Саша, оптимизируют не проходы по массиву, а алгоритмы. Правильный или неправильный алгоритм может улучшить или ухудшить производительность всего на порядки, правильный проход по массиву --- в разы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 00:33 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryПодумаю над алгоритмом в общем случае. А как же оптимизация прохода по массиву за исключением массива индексов ?) Саша, оптимизируют не проходы по массиву, а алгоритмы. Правильный или неправильный алгоритм может улучшить или ухудшить производительность всего на порядки, правильный проход по массиву --- в разы. В данном конкретном случае, мне нужно найти вес множества элементов k в сочетании , что даст мне минимальный вес графа. То есть нужно, в любом случае сделать полный перебор всех возможных множеств троек в сочетании . В общем случае, будет иметь значение и порядок элементов, потому рассуждения выше нужно применить к размещениям . Правильно ли я понимаю алгоритм решения(полный перебор), либо существуют другой способ ? PS Но тем не менее, в общем случае, задачу оптимизации прохода по множеству элементов, за исключением некоторых элементов было бы интересно решить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 02:16 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПравильно ли я понимаю алгоритм решения(полный перебор), либо существуют другой способ ? Полный перебор для графовых задач - это самое плохое решение. Обычно ищут ограничители которые позволяют его существенно уменьшить. Иногда строют доп. структуры данных как индекс исходных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 09:34 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
Ещё ищут жадные алгоритмы. В частности тут можно сделать предположение, что минимальный цикл состоит из дуг минимальной длины, и хотя бы начать рассмотрение всех циклов с дуг минимальной длины. Затем можно и нужно урезать дальнейшие рассмотрения, если уже сосчитанная длина цикла превышает уже найденную длину минимального цикла. Вообще, жадные алгоритмы -- это большое поле для фантазии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 16:19 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Тут "жадные" нужно писать в кавычках, потому что не факт, что алгоритм в итоге получится жадным. Напоминаю, что жадный алгоритм быстро ищет решение (оптимум), но не гарантирует, что это действительно глобальный минимум или максимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 16:20 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
я бы брал так 1) ;масивА = МасивуБ = растояниям до всех площадей из заданой точки мы в точке С А и Б другие две вершины пройдя по двойному циклу ищем мимимум, который и есть решение. Для всех масивА для всех мисив Б если изА + изБ + растояниеАБ меньше минимум - запомнить можно оптимизировать перед вторым циклом смотрим, если текущее значение уже больше найденого минимума, пропускаем этот шаг А если точек не 3 а больше...аналогично на каждом новом цикле оптимизация. ЗЫ в общем случае - задача не привязана к геометрии, тоесть могут быть для 1000 площадей растояния противоречащие здравому смыслу...но теоритически возможны тоесть для выборки минимума нужно пересматривать все варианта...все что можно оптимизировать это уже имея некий минимум и видя что очередной расматриваемый путь уже больше откинуть целую ветку возможных вариантов дальнейшего развития событий. такие циклы - по сути проход по дереву возможных комбинаций в глубину - эфективно будет отсеивать куски графа(ветки дерева) можно пойти горизонтальным просмотром..тогда оптимизировать по если осталось ещо 2 шага, а ктото уже вырвался вперёд над другим больше чем на 2000 уже нет смысла расматривать эту ведку(ведь растояния до тысячи, за два шага максимум можно 2000 набрать) если ктото уже дальше, он уже точно минимумом не станет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 18:04 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, зачем два массива? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2014, 19:32 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
maytonalex564657498765453, зачем два массива? Мы в точке С, нам надо найти точки А Б для создания траектории. есть масив всех растояний от С до других Ни точек. мы его берём дважды - первый содержит потенциальные точки А, второй потенциальные точки Б тоесть берём масив - множество, перемножаем его с самим собой, получаем все возможные варианты (выкидывая сразу А=Б) и дорисовывыем растояние между ними аля С-Аи С-Би Аи-Би 1 2 12 3 1 6 .... и ищем строку где сумма минимальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 11:27 |
|
||
|
Оптимизация прохода по индексированному массиву
|
|||
|---|---|---|---|
|
#18+
вообще задача интересная...вчера в конце рабочего дня решил подумать - но изза усталости и давности решения таких задач, начал плавиться мозг и забил... делюсь мыслями, может кто что скажет нам или попробует продолжить. расширим задачу на Н площадей - найти круг из К точек помните как в вузе учили способы представления знаний - а именно задание направленого графа ввиде матрицы - 0 есть связь, 1 нету если такую матрицу умножить саму на себя, получим матрицу связей узлов через один ---тоесть какие узлы связаны в два шага, ещо раз умножим - в три итд... вот я и начинал мыслить будет матрица Р - растояний будет матрица С - связей тогда умножив - мы получим не просто что с чем связано, но и растояние связи Р*С = Р2 - растояния между площадями через одну Р2*С получим растояния для 3 шагов... и так дальше. вроде всё просто. но если точек 1000, а шага надо три, то явно проход двойного цикла по 1000 итераций каждый 1000000 всего будет проще чем дважды умножить такую матрицу умножение это тот же двойной цикл, но в теле второго - пощитать сумму умножения строки на 1000 елементов на столбец 1000... явно вычислительная сложность больше. становиться вопрос - не рационально... вот и задумывался может както оптимизировать плюс нам надо не найти минимальное растояние, а найти маршрут с минимальным растоянием а даный способ тут тоже не ахти...вот на этой мысли я поднял руку, резко опустил со словами - да е%%%ь оно конём. может кому интерестно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2014, 11:36 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38793227&tid=1341169]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 554ms |

| 0 / 0 |
