|
|
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Дана матрица (размерность может быть любая) заполненная числами. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 17:08 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
dimbasbearПри переходе из одной ячейки в другую - числа этих ячеек суммируются. Как дойти из ячейки A1 в E4 чтобы сумма была минимальной и наоборот ? В лоб: перебором всех путей и суммой получающейся в процессе каждого пути. Университетов не заканчивали, так что о возможном математическом методе можем и не знать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 18:23 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Алгоритм Дейкстры или Priority-First-Search (что то же самое). Далее -- google/wikipedia, что больше нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2010, 20:01 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
dimbasbear, строишь рекурсивную функцию, каторая проверяет путь через все соседние клетки самой себя. И возращаешь пару: путь и сумма. зы. это без математики, самый банальное 20 строчное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 00:50 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
не могли бы вы привести конкретный пример на любом из языков, например pascal ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 10:18 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Конечно . Пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 11:11 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Еще бы уточнить - путь строится любом направлении, или только вправо/вниз/(вправо-вниз)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 14:33 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
AndreTMЕще бы уточнить - путь строится любом направлении, или только вправо/вниз/(вправо-вниз)? Строиться может в любом направлении важно чтобы когда добрался до конечной точки сумма была максимальной или минимальной :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 15:33 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Похоже мы имеем дело с графом, у которого "веса" стоят на вершинах. Для Дейкстры надо будет сделать перерасчёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 17:01 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
maytonПохоже мы имеем дело с графом, у которого "веса" стоят на вершинах. Для Дейкстры надо будет сделать перерасчёт. Он же тривиален и делается "на лету". Хотя может быть сделан, кстати, двумя разными способами (считать весом дуги вес вершины, для которой она является исходящей или для которой она является входящей), которые будут давать один и тот же результат (маршрут). Что-то в этом роде на питоне: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 17:51 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Это, блин, азбука (см.). С гарантией делается ТОЛЬКО прямым перебором. Любая эвристика дает только наиболее вероятный путь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 19:54 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
УнрегистередЭто, блин, азбука (см.). С гарантией делается ТОЛЬКО прямым перебором. Любая эвристика дает только наиболее вероятный путь. Чушь сказал. Ты хоть понял что мы говорим об Алгоритме Дейкстры? Какие прямые переборы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2010, 20:00 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Прошу прощения. Невнимательно прочел исходный пост, показалось, что речь идет о максимальной сумме. Для минимальной суммы (если значения неотрицательны) действительно будет работать алгоритм Дейкстры. И вообще любой рекурсивный алгоритм, выбирающий соседний элемент с меньшим весом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 12:59 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Унрегистеред, Любая задача максимизации однозначной функции может быть переформулирована в задачу минимизации другой однозначной функции; решения этих задач (точки оптимума) будут совпадать. Это же очевидно. "F(x) -> max" эквивалентно "G(x) = -F(x) -> min" В данной задаче достаточно приписать минус ко всем числам в матрице. Или переопределить оператор сравнения элементов priority queue (для c++/c#/java). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:12 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiot Код: plaintext 1. 2. 3. Я тут прикинул на глаз. Оптимальный путь должен быть (для 4-х связных соседей) примерно такой: Код: plaintext 1. 2. 3. Стоимость = 35. У тебя такой-же ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:25 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Похоже, что да. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:33 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
А максимум, после добавления строки Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:37 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotА максимум, после добавления строки Код: plaintext Код: plaintext Хотя это весьма глупо. Также как и это: junior idiot Унрегистеред, Любая задача максимизации однозначной функции может быть переформулирована в задачу минимизации другой однозначной функции; решения этих задач (точки оптимума) будут совпадать. Это же очевидно. "F(x) -> max" эквивалентно "G(x) = -F(x) -> min" В данной задаче достаточно приписать минус ко всем числам в матрице. Или переопределить оператор сравнения элементов priority queue (для c++/c#/java). Ляпнул неподумавши. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 13:42 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotПохоже, что да. Код: plaintext Если слегка изменить исходные данные. Ввести туда скажем бесконечно большой вес (для простоты пускай будет X), то постановка приобретает несколько иной оттенок. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 14:44 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
а там отсечения есть ? например если на промежуточном этапе получили сумму которая больше чем сумма какого нибудь варианта до этого, то закончить поиск и перейти к следующему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 14:52 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
У "волны" нет отсечений. Вернее для неё отсечения безсмысленны т.к. на каждом уровне рекурсии происходит проверка следующего уровня и тут-же возврат наверк для перехода к следующей ветке. Да и сама рекурсия там "вырождена" в вычисления на декартовой плоскости. Для Дейкстры - не знаю. Надо подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2010, 15:06 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Вообще, ТС сказал, что двигаться можно в любом направлении (я так понимаю, что и по диагонали, и влево, и вверх... естественно, без пересечений пути). Тогда задача нахождения минимального пути решается по Дейкстре (ну, граф будет немного побольше, но это непринципиально). А максимумом будет сумма всех клеток, так что это будет задача "пройти по полю из угла в угол, побывав в каждой клетке по одному разу". Алгоритм этот уже известен и реализуется в несколько строк. Если же матрица будет содержать и отрицательные значения, то минимум можно найти по Беллману-Форду, а максимум можно посчитать и перебором путей, например... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 14:54 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
AndreTMВообще, ТС сказал, что двигаться можно в любом направлении (я так понимаю, что и по диагонали, и влево, и вверх... естественно, без пересечений пути). Думаю нет. Тогда задача нахождения минимального пути решается по Дейкстре (ну, граф будет немного побольше, но это непринципиально). Волна - это тот-же Дейкстра. Только частный случай, оптимизированный для декартова порядка вершин и одинаковых весов дуг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:31 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
AndreTMА максимумом будет сумма всех клеток, так что это будет задача "пройти по полю из угла в угол, побывав в каждой клетке по одному разу". Алгоритм этот уже известен и реализуется в несколько строк. Несовсем (не всегда) так. Случай с чётным количеством строк и чётным количеством столбцов совсем не очевиден. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 15:46 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Да, Дейкстра похоже тот же обход с отсечениями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 18:19 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Ничего алгоритм Дейкстры не отсекает. Он меняет порядок перебора вершин (в первую очередь на каждом шаге рассматривается наиболее "перспективная", то есть "ближайшая" к исходной для данной итерации, и потому как только ей оказывается целевая вершина, можно сразу утверждать, что найдет кратчайший путь). "Волна" (breadth-first-search) в принципе расчитана на графы любой топологии (не обязательно прямоугольные сетки), но вершины для перебора хранятся в "обычной" очереди (queue); а в алгоритме Дейкстры всё то же самое, но очередь заменена на кучу (heap) или очередь с приоритетом (priority queue), что суть разные названия одной струтуры данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 18:48 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotНичего алгоритм Дейкстры не отсекает. Он меняет порядок перебора вершин (в первую очередь на каждом шаге рассматривается наиболее "перспективная", то есть "ближайшая" к исходной для данной итерации, и потому как только ей оказывается целевая вершина, можно сразу утверждать, что найдет кратчайший путь). "Волна" (breadth-first-search) в принципе расчитана на графы любой топологии (не обязательно прямоугольные сетки), но вершины для перебора хранятся в "обычной" очереди (queue); а в алгоритме Дейкстры всё то же самое, но очередь заменена на кучу (heap) или очередь с приоритетом (priority queue), что суть разные названия одной струтуры данных. Ну как же не отсекает если отсекает заведомо безперспективные варианты. Он просто туда не переходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 20:58 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
rstudioНу как же не отсекает если отсекает заведомо безперспективные варианты. Он просто туда не переходит. Что значит "не переходит"? Может и перейти, если со временем выяснится, что "перспективные" варианты не дают лучшего результата. Ни одна ситуация не "забывается", а именно это называют "отсечением", когда какое-то подмножество решений вообще исключается из перебора ещё до окончания работы алгоритма, и к нему не возвращаются ни при каких условиях (например, если уже найдено решение, лучшее, чем предельно возможное на этом подмножестве -- простейший алгоритм ветвей и границ). В алгоритме Дейкстры такого не происходит. В частности, если маршрута до целевой вершины не существует вообще, то будут перебраны все вершины графа, достижимые из исходной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 21:25 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotAndreTMА максимумом будет сумма всех клеток, так что это будет задача "пройти по полю из угла в угол, побывав в каждой клетке по одному разу". Алгоритм этот уже известен и реализуется в несколько строк. Несовсем (не всегда) так. Случай с чётным количеством строк и чётным количеством столбцов совсем не очевиден. Вот процедура, заполняющая массив (maxI,maxJ,2) векторами перехода к следующему полю (двигаясь от 1,1 до maxI,maxJ "змейкой", перпендикулярной диагонали), при этом обходятся все поля без пересечений Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 21:34 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
AndreTM Код: plaintext 1. 2. 3. 4. Диагональные перемещения? Скукота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 22:09 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotДиагональные перемещения? Скукота. Вообще, это было по поводу "Случай с чётным количеством строк и чётным количеством столбцов совсем не очевиден", поскольку для любой матрицы доказывается (как сам метод, так и инвариант алгоритма). А что, предлагаете стохастически решать? :) Просто, я "поиск максимума" со слов ТС именно так понял... а про минимум уже рассуждений хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 22:27 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
AndreTMА что, предлагаете стохастически решать? Нет, предлагаю найти оптимальную "змейку", решив, какую(ие) именно клетку(и) выбросить из полного обхода (который невозможен при чётном количестве столбцов и строк, если не делать диагональных скачков, отсутствие коих, на мой взгляд, подразумевается, поскольку с ними в задаче поиска маршрута минимальной суммы становятся бессмысленными вертикально-горизонтальные перемещения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 23:17 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Как это полный обход невозможен? Тут уж все только глубиной стека возвратов будет определяться да мощностями... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 23:26 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Честно говоря, я не понял что в excel-нике. Два каких-то маршрута, ни один из которых не покрывает всю матрицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2010, 23:39 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Ну, это для примера. Рекурсивный поиск минимума и максимума с условием движения только вниз или вправо. Естественно, можно сделать из этого алгоритма поиск и во все стороны (ну, без диагоналей), но данная реализация будет медленной. Поэтому должно делаться в массиве и с дополнительным массивом-маской пути. Ресурсов, конечно, требует немалых... но и работать будет на любых данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2010, 00:02 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotНичего алгоритм Дейкстры не отсекает. Он меняет порядок перебора вершин (в первую очередь на каждом шаге рассматривается наиболее "перспективная", то есть "ближайшая" к исходной для данной итерации, и потому как только ей оказывается целевая вершина, можно сразу утверждать, что найдет кратчайший путь). "Волна" (breadth-first-search) в принципе расчитана на графы любой топологии (не обязательно прямоугольные сетки), но вершины для перебора хранятся в "обычной" очереди (queue); а в алгоритме Дейкстры всё то же самое, но очередь заменена на кучу (heap) или очередь с приоритетом (priority queue), что суть разные названия одной струтуры данных. гуглим на википедии Дейкстру и читаем Все соседи вершины 1 проверены. Текущее минимальное расстояние до вершины 1 считается окончательным и пересмотру не подлежит(то, что это действительно так, впервые доказал Э. Дейкстра) . Вычеркнем её из графа, чтобы отметить, что эта вершина посещена. Улавливаешь ? Дейкстра доказал что можно найти минимальное расстояние для этой вершины и больше никогда туда не возвращаться. Тоесть отсечь любые дополнительные расчеты "в лоб" с этой вершиной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 14:49 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
rstudio, я прекрасно знаю, как и почему работает алгоритм Дейкстры. Но rstudioОн просто туда не переходит. rstudioбольше никогда туда не возвращаться. несколько разные вещи. Иными словами, ты ни на что не возразил из мною сказанного. Отсутствие же "дополнительных расчётов" при уже найденном решении (подзадачи) называть "отсечением" -- более чем странно; эдак любое, скажем, аналитическое решение можно записать в "методы отсечения", оно же все варианты в лоб не перебирает. Классическими примерами алгоритмов с отсечениями являются метод ветвей и границ (и его улучшенная версия -- альфа-бета отсечения) и алгоритм Гомори (который иногда даже так и называют -- "метод отсечений Гомори"). Вот их лучше "погугли в википедии", чтобы называть вещи своими именами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 15:23 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotОтсутствие же "дополнительных расчётов" при уже найденном решении (подзадачи) называть "отсечением" -- более чем странно; эдак любое, скажем, аналитическое решение можно записать в "методы отсечения", оно же все варианты в лоб не перебирает. В аналитеческое решение к отсечениям можно записать только такое решение, которое отсекает заведомо доказанные провальные ветки . Вот Дейкстра тоже, аналитически доказал, что больше обсчитывать не нужно. Минимальное расстояние есть окончательным и пересчетам не подлежит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 15:59 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Ну ладно. Пусть, скажем, поиск корня линейного уравнения a * x = b при a =/= 0, b =/= 0 по аналитической формуле x = b / a тоже будет называться "методом отсечения", раз уж это аналитически доказано и полный перебор не производится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 16:11 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiotНу ладно. Пусть, скажем, поиск корня линейного уравнения a * x = b при a =/= 0, b =/= 0 по аналитической формуле x = b / a тоже будет называться "методом отсечения", раз уж это аналитически доказано и полный перебор не производится. Нет. Во-первых здесь ограничение потому что на ноль делить нельзя. Во-вторых, отсечение это по сути сужение расчетов за счето того, что в процессе работы алгоритма были высчитаны некоторые данные, которые по сути доказали несостоятельность дальнейшего развития с этой точки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 16:18 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
rstudioВо-первых здесь ограничение потому что на ноль делить нельзя. Никто и не просит: junior idiota =/= 0, b =/= 0 rstudioВо-вторых, отсечение это по сути сужение расчетов за счето того, что в процессе работы алгоритма были высчитаны некоторые данные, которые по сути доказали несостоятельность дальнейшего развития с этой точки. Именно так. В процессе работы алгоритма было высчитано отношение b к a, которое по сути доказало несостоятельность дальнейших поисков значений x, удовлетворяющих равенству. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 16:38 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
junior idiot, ладно, закроем этот разговор. Он уже скорей напоминает разговор о русском языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 17:39 |
|
||
|
Помогите решить задачку
|
|||
|---|---|---|---|
|
#18+
Ну, в принципе, всё уже понятно. Минимум ищем по Дейкстре, а максимум - перебором с условием окончания при нахождении первого же полного пути. Единственный затык - алгоритм поиска максимума при условии того, что у нас чётные M и N более 4, плюс наличие неположительных значений в матрице... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2010, 23:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1343479]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 528ms |

| 0 / 0 |
