Size: a a a

2020 October 13

A

A L T I R T I X in pro.algorithms
Привет. Дали задание "Написать программу нахождения пути из города А в город Х с использованием алгоритма А*. Количество городов не менее 10. Программу написать на языке программирования C#". До этого было задание сделать решение лабиринта на основе бинарной матрицы с использованием слепого рекурсивного поиска в глубину и оно проблем не вызвало. А над этим уже несколько дней голову ломаю. Насколько я понял, прошлую программу не переделаешь под это задание, так как, скорее всего, бинарная матрица тут уже не подойдет и нужен будет граф, а эвристический поиск должен включать в себя стоимость каждого из путей. Я пытался найти уже готовый код, но там никто не указывает заранее стоимость путей. Да и в целом, код завуалирован и только варианты на пайтоне кажутся не сложными. Но переводить код с языка, где нет жесткой типизации сложно, особенно не понимая, что происходит. Может у Вас есть какие - то мысли?
источник

CD

Constantine Drozdov in pro.algorithms
A L T I R T I X
Привет. Дали задание "Написать программу нахождения пути из города А в город Х с использованием алгоритма А*. Количество городов не менее 10. Программу написать на языке программирования C#". До этого было задание сделать решение лабиринта на основе бинарной матрицы с использованием слепого рекурсивного поиска в глубину и оно проблем не вызвало. А над этим уже несколько дней голову ломаю. Насколько я понял, прошлую программу не переделаешь под это задание, так как, скорее всего, бинарная матрица тут уже не подойдет и нужен будет граф, а эвристический поиск должен включать в себя стоимость каждого из путей. Я пытался найти уже готовый код, но там никто не указывает заранее стоимость путей. Да и в целом, код завуалирован и только варианты на пайтоне кажутся не сложными. Но переводить код с языка, где нет жесткой типизации сложно, особенно не понимая, что происходит. Может у Вас есть какие - то мысли?
Алгоритм А* в качестве входных данных требует оценку
источник

CD

Constantine Drozdov in pro.algorithms
Отсюда вопрос: в каком виде представлены входные данные?
источник

A

A L T I R T I X in pro.algorithms
Constantine Drozdov
Отсюда вопрос: в каком виде представлены входные данные?
На это ограничения нет. Но я представлял реализацию в виде ориентированного графа. Вершины графа - города. Стоимостью может считаться либо расстояние города либо стоимость проезда в город.
источник

A

A L T I R T I X in pro.algorithms
Либо двумерный массив с городами и у каждого [i][j] есть стоимость
источник

CD

Constantine Drozdov in pro.algorithms
A L T I R T I X
На это ограничения нет. Но я представлял реализацию в виде ориентированного графа. Вершины графа - города. Стоимостью может считаться либо расстояние города либо стоимость проезда в город.
Вы понимаете, что если бы для произвольного графа можно было построить эту оценку, то алгоритм А* не требовал бы построение оценки на вход?
источник

A

A L T I R T I X in pro.algorithms
Constantine Drozdov
Вы понимаете, что если бы для произвольного графа можно было построить эту оценку, то алгоритм А* не требовал бы построение оценки на вход?
Я на данном этапе мало чего понимаю. Но на Википедии есть подобный пример.
источник

CD

Constantine Drozdov in pro.algorithms
A L T I R T I X
Я на данном этапе мало чего понимаю. Но на Википедии есть подобный пример.
а что тут нарисовано вы понимаете? h(x) и веса графа это геометрическое расстояние между точками на рисунке
источник

CD

Constantine Drozdov in pro.algorithms
алгоритм А* для этого случая работает, собственно, как дейкстра по "аномалии" геометрического расстояния - весом ребра вместо d(from, to) считается d(from, to) + d(to, target) - d(from, target)
источник

P

Pavel in pro.algorithms
Constantine Drozdov
алгоритм А* для этого случая работает, собственно, как дейкстра по "аномалии" геометрического расстояния - весом ребра вместо d(from, to) считается d(from, to) + d(to, target) - d(from, target)
А что за минус в конце? Или это тире/равенство?
источник

IZ

Ilia Zviagin in pro.algorithms
Aragaer
в обычных случаях матрица просто хранится последовательно в виде 10000 последовательных чисел. При кэшмиссе будет загружаться некоторая непрерывная последовательность байт, следовательно при обходе "по строкам" после одного промаха несколько следующих обращений заведомо будут в кэш
Ничего, что это вообще-то от способа хранения матрицы зависит, от языка программирования немного?
И от способа кэширования ещё? Нет?
источник

IZ

Ilia Zviagin in pro.algorithms
Alexey Stepanov
Я правильно понимаю, что при проходе по строке соседние элементы в некотором диапазоне попадут в кеш
А когда идём по столбцу, новый элемент ещё не оказался в кеше, а к тому моменту, когда пойдём новый столбец - уже будет очищено
неправильно.
источник

IZ

Ilia Zviagin in pro.algorithms
osm1um
Я уже спрашивал на счёт литературы, но услышал только хейт в сторону предложенных вариантов.
Кормен Лейзерсон, Риверст Штайн.
источник

A

Aragaer in pro.algorithms
Ilia Zviagin
Ничего, что это вообще-то от способа хранения матрицы зависит, от языка программирования немного?
И от способа кэширования ещё? Нет?
конечно зависит. Я говорил о хранении "как сишный типа двумерный массив"
источник

IZ

Ilia Zviagin in pro.algorithms
Aragaer
конечно зависит. Я говорил о хранении "как сишный типа двумерный массив"
А там было в вопросе слово "СИШНЫЙ" ?
источник

IZ

Ilia Zviagin in pro.algorithms
Aragaer
конечно зависит. Я говорил о хранении "как сишный типа двумерный массив"
Компьютер, архитектура указывались?
источник

A

Aragaer in pro.algorithms
нет, но человека мой ответ удовлетворил
источник

IZ

Ilia Zviagin in pro.algorithms
Когда уже поймёте, что кэш -- это неуправляемая и абсолютно прозрачная для работы программы структура, бессмысленно предсказывать его поведение.
источник

IZ

Ilia Zviagin in pro.algorithms
Aragaer
нет, но человека мой ответ удовлетворил
А , ну да, ну  да
источник

A

Aragaer in pro.algorithms
когда я пишу код на си и работаю с массивами, то могу увидеть, что вот такой порядок обхода массива будет более эффективным, чем эдакий
источник