Генерация всех троек из графика? - PullRequest
0 голосов
/ 08 апреля 2011

Я хочу сгенерировать все тройки из графика.Все тройки из первого «набора» будут 1,2,3 и 1,3,2 и 3,2,1.Меня не интересует другая тройка этого набора (то есть 2,1,3 или 3,1,2).Как я могу это сделать?

1 Ответ

4 голосов
/ 10 апреля 2011

Как обсуждалось в комментариях к вопросу, не очень ясно, что именно представляет собой установка epitaph , и по какой-то причине он / она, кажется, не желает уточнить. Но давайте предположим, что «граф» на самом деле просто представлен матрицей расстояний (которая может быть тем, что предполагается показать путаницей чисел и X в вопросе), с фактическим числовым расстоянием для каждой пары вершин.

В этом случае здесь не происходит ничего очень графического; есть край для каждой пары без исключения вершин; и все, что мы можем сделать, это перечислить каждую тройку вершин.

Для каждого набора из трех вершин a, b, c нам нужно проверить, что d (a, b) <= d (a, c) + d (c, b) и что d (a, c) <= d (a, b) + d (b, c), и что d (b, c) <= d (b, a) + d (a, c). Итак, давайте сделаем это. Ниже приводится псевдокод, потому что, если я попытаюсь написать его на PHP (который я использую как можно реже), я сделаю ошибки. </p>

for i from 0 to n_vertices-3
  for j from i+1 to n_vertices-2
    for k from j+1 to n_vertices-1
      # now i,j,k are three distinct vertices, and every set of three vertices
      # will occur once as we run through the loops.
      a = distances[i,j]
      b = distances[i,k]
      c = distances[j,k]
      if a>b+c or b>a+c or c>a+b
        triangle inequality is violated; complain

Если ваш график представлен не в виде матрицы расстояний, а в том случае, если множество ребер может не существовать, вам нужно сделать что-то другое.

(Примечание: если ваш график должен удовлетворять неравенству треугольника, то, возможно, в нем не должно быть пропущено ни одного ребра, если он фактически не отсоединен. Это зависит от того, должны ли расстояния быть «кратчайшим расстоянием от х до у» «(в этом случае, если неравенство треугольника терпит неудачу, то что-то нарушается, и в связном графе не должно быть отсутствующих ребер) или« расстояние прямого пути от x до y »(в этом случае, если неравенство треугольника терпит неудачу, это просто указывает что якобы прямой путь не стоит использовать).)

...