Блог пользователя yermak0v

Автор yermak0v, 9 лет назад, По-русски

Привет, все.
На днях я придумал одну [очень] интересную задачу.
Собственно задача:
У нас есть ориентированный граф n вершин и m ребер. Вы находитесь в вершине 1. Также известно, что, будучи в вершине v вы пойдете в вершину u с определенной вероятностью. Также с некоторой вероятностью вы останетесь в этой вершине и не пойдете больше никуда. Очевидно, что сумма вероятностей прохождения по какому-то ребру и того, что вы останетесь на месте, — равна 1. Нужно посчитать вероятность с которой вы попадете в вершину to, начав свой путь с вершины 1.
Мое решение, а точнее сказать размышления о решении под катом.
UPD решение было найдено. Пару слов в конце.
Мои раздумия (сразу предупреждаю: буду описывать ход своих мыслей — поэтому может быть немного лишнего):
1. возьмем такой пример: у нас есть путь v1 = 1, v2,..., vk = to. Имея хоть немного знаний в теории вероятностей, можно увидеть, что вероятность прохождения именно по этому пути равна произведению вероятностей каждого ребра. Это вроде и очевидно, но вдруг кто не знает?..
2. сразу хочется запустить какой-то поиск по графу, и именно эта идея пока играет ключевую роль.
2.1. поиск в ширину не подходит, по причине того, что в вершину u может приходить несколько путей разной длины, но мы в нее зайдем только раз, и вероятность которую мы получим через второй путь мы недосчитаем во всех вершинах, которые доступны из u. Поэтому мы его сразу бракуем.
2.2. значит у нас остается поиск в глубину. Правда с ним тоже не все гладко: за сколько будет работать такой алгоритм, я пока понять не смог...
3. с горем пополам таки пишем эту идею. Профит. Но радость длится недолго.
4. вспоминаем, что в графах бывают циклы, плачем,:
с первого взгляда кажется, что из-за циклов, ответ для вершин, по пути к которым есть циклы, будет бесконечно большим, но это не так: цикл, как известно, является замкнутым путем, и вероятность прохождения по нему также можно посчитать.
5. замечаем, что в случае с вероятностями, все числа в пределах [0,1], а значит с каждым прохождением по циклу к вероятности прихода в вершину добавляются члены геометричесской прогрессии. Ее знаменателем будет вероятность прохождения по циклу, а первым членом посчитанная ранее вероятность прихода в эту вершину. Как известно, по этих данных можно найти предел этой суммы, и это очень просто. Но радоваться все еще очень рано... Даже в таком случае не очень-то ясно как именно считать теперь это все. В случае с одним циклом все выворачивается само собой, но когда циклов побольше — то даже интуитивно не понятно как считать эту гребаную веротность...
Так вот, я хотел бы попросить у вас помощи, или хотя бы хоть какого-то объективного доказательства, что решить эту задачу нереально.
P.S. если кто-то подскажет программу, в которой можно не прикладая много усилий рисовать графы — то я добавлю сюда немного картинок.
UPD. к счастью, или к сожалению, сойти с ума не вышло. Решение помогли найти, и оно оказалось намного проще, чем я думал. Метод решения описан тут. Код решения от pavel.savchenkov. От себя добавлю очень похожа на задачу о нахождении количества путей заданой длины. Даже могу сказать, что задачи мало отличаются друг от друга.

  • Проголосовать: нравится
  • +4
  • Проголосовать: не нравится

»
9 лет назад, # |
Rev. 2   Проголосовать: нравится +4 Проголосовать: не нравится

Можно почитать о марковских цепях. А можно подождать, пока о них расскажут в курсе теории вероятностей / случайных процессов.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Также с некоторой вероятностью вы останетесь в этой вершине и не пойдете больше никуда.

    Это условие не позволяет нам использовать петлю, когда игрок никуда не идет.
    Но даже не будь этого условия, мне немного не понятно вот что: в цепях Маркова мы можем посчитать вероятность, что мы будем в некоторой вершине в момент времени n, но не ясно, станут ли вероятности в какой-то момент повторяться? Ведь в моей задаче я ничего не думал, о том, что ответ должен считаться для определенного момента времени.

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Условие остаться в вершине навсегда можно решать так: Вместо петлей делать ребра в фиктивные вершины. Для каждой вершины исходного графа своя фиктивная вершина. Для каждой фиктивной вершины добавить петлю с вероятностью 1.

»
9 лет назад, # |
Rev. 3   Проголосовать: нравится -12 Проголосовать: не нравится

Мне это здорово напомнило гугловый алгоритм Page Rank.

Там ведь смысл именно в том что человек случайно переходит по ссылкам со страницы на страницу, при этом есть вероятность что он в какой-то момент случайно перескакивает на произвольную несвязанную страницу (ну как бы этот человек бросил сёрфить инет и пошёл пить кофе а другой зашёл).

Решается через нахождение собственного вектора матрицы вероятностей переходов — у меня даже задача про это есть с разъяснением... :)

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

http://www.everfall.com/paste/id.php?etpb56iqfbo7

Код считает вероятность прийти в одну из n фиктивных вершин за 2p ходов.

Если запустить, будет видно, что вероятности через некоторое время стабилизируются.

Как это работает вроде уже написали выше.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +16 Проголосовать: не нравится

    Но ведь можно за чистый куб...

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Может я туплю, посмотрел раздел про Finite state space на вики, он нам вроде не подходит, так как (P - En) необратима.

      Как найти за куб?

      Видимо, это всем очевидно...

      • »
        »
        »
        »
        9 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Вообще говоря, не очень очевидно(по крайней мере, мне), но мне в свое время повезло про это послушать лекцию. ссылка