самый близкий

Самые близкие соседи в радиусе

Синтаксис

nodeIDs = nearest(G,s,d)
nodeIDs = nearest(G,s,d,Name,Value)
[nodeIDs,dist] = nearest(___)

Описание

пример

nodeIDs = nearest(G,s,d) возвращает все узлы в графике G, которые являются на расстоянии d от узла s. Если график взвешивается (то есть, если G.Edges содержит переменный Weight), то те веса используются в качестве расстояний вдоль краев в графике. В противном случае все граничные расстояния взяты, чтобы быть 1.

пример

nodeIDs = nearest(G,s,d,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами в виде пар "имя-значение". Например, если G является взвешенным графиком, то nearest(G,s,d,'Method','unweighted') игнорирует вес ребра в графике G и вместо этого обрабатывает весь вес ребра как 1.

пример

[nodeIDs,dist] = nearest(___) дополнительно возвращает расстояние до каждого из самых близких соседей, таких, что dist(j) является расстоянием от исходного узла s к узлу nodeIDs(j). Можно использовать любую из комбинаций входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Создайте и постройте график графика со взвешенными краями.

s = [1 1 1 1 1 2 2 2 3 3 3 3 3];
t = [2 4 5 6 7 3 8 9 10 11 12 13 14];
weights = randi([1 10],1,13);
G = graph(s,t,weights);
p = plot(G,'Layout','force','EdgeLabel',G.Edges.Weight);

Определите, какие узлы в радиусе 15 от узла 1.

nn = nearest(G,1,15)
nn = 9×1

     5
     7
     2
     3
     4
     6
     8
    12
     9

Подсветите исходный узел, столь же зеленый и самые близкие соседи как красный.

highlight(p,1,'NodeColor','g')
highlight(p,nn,'NodeColor','r')

Создайте и постройте график графика со взвешенными краями.

s = [1 1 1 2 2 6 6 7 7 3 3 9 9 4 4 11 11 8];
t = [2 3 4 5 6 7 8 5 8 9 10 5 10 11 12 10 12 12];
weights = [10 10 10 10 10 1 1 1 1 1 1 1 1 1 1 1 1 1];
G = graph(s,t,weights);
plot(G,'EdgeLabel',G.Edges.Weight)

Определите, какие узлы в радиусе 5 от узла 3 и возвращают расстояние до каждого узла.

[nn,dist] = nearest(G,3,5)
nn = 9×1

     9
    10
     5
    11
     4
     7
    12
     6
     8

dist = 9×1

     1
     1
     2
     2
     3
     3
     3
     4
     4

Создайте и постройте график ориентированного графа со взвешенными краями.

s = {'a' 'a' 'a' 'b' 'c' 'c' 'e' 'f' 'f'};
t = {'b' 'c' 'd' 'a' 'a' 'd' 'f' 'a' 'b'};
weights = [1 1 1 2 2 2 2 2 2];
G = digraph(s,t,weights);
plot(G,'EdgeLabel',G.Edges.Weight)

Определите самые близкие узлы в радиусе 1 от узла 'a', измеренный исходящим расстоянием пути от узла 'a'.

nn_out = nearest(G,'a',1)
nn_out = 3x1 cell array
    {'b'}
    {'c'}
    {'d'}

Определите все узлы, которые имеют входящее продвижение путей к узлу 'a' путем определения радиуса как Inf.

nn_in = nearest(G,'a',Inf,'Direction','incoming')
nn_in = 4x1 cell array
    {'b'}
    {'c'}
    {'f'}
    {'e'}

Входные параметры

свернуть все

Входной график, заданный как объект граф или диграф. Используйте граф для создания неориентированного графа или диграф для создания ориентированного графа.

Пример: G = график (1,2)

Пример: G = digraph([1 2],[2 3])

Исходный узел, заданный как индекс узла или имя узла в одной из форм в этой таблице.

ЗначениеПример
Скалярный индекс узла1
Имя узла вектора символаA
Представьте скалярное имя узла в виде строкиA

Пример: самый близкий (G, 3,1)

Пример: самый близкий (G, 5)

Соседний радиус расстояния, заданный в виде числа.

Пример: самый близкий (G, 3,1)

Пример: самый близкий (G, 2.5)

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [nodeIDs, dist] = самый близкий (G, s, 5, 'Метод', 'невзвешенный', 'Направление', 'поступая')

Примечание

Опция 'Direction' может только быть задана с ориентированными графами.

Направление измерения расстояния, заданного как пара, разделенная запятой, состоящая из 'Direction' и одна из опций в этой таблице.

ОпцияОписание
'outgoing' (значение по умолчанию)Расстояния вычисляются с помощью путей, выходящих из исходного узла s.
'incoming'Расстояния вычисляются с помощью путей, входящих, чтобы получить узел s.

Пример: самый близкий (G, s, d, 'Направление', 'поступая')

Алгоритм поиска кратчайшего пути, заданный как пара, разделенная запятой, состоящая из 'Method' и одна из опций в этой таблице.

ОпцияОписание
'auto' (значение по умолчанию)

Опция 'auto' автоматически выбирает алгоритм:

  • 'unweighted' используется для graph и входных параметров digraph без веса ребра.

  • 'positive' используется для всех входных параметров graph, которые имеют вес ребра, и требует, чтобы веса были неотрицательными. Эта опция также используется для входных параметров digraph с неотрицательным весом ребра.

  • 'mixed' используется для входных параметров digraph, вес ребра которых содержит некоторые отрицательные величины. График не может иметь отрицательных циклов.

'unweighted'

Вычисление в ширину, которое обрабатывает весь вес ребра как 1.

'positive'

Алгоритм Дейкстры, который требует, чтобы весь вес ребра был неотрицательным.

'mixed' (только для digraph)

Алгоритм Форда Белмана для ориентированных графов, который требует, чтобы график не имел никаких отрицательных циклов.

В то время как 'mixed' медленнее, чем 'positive' для той же проблемы, 'mixed' более универсален, когда это позволяет некоторому весу ребра быть отрицательным.

Примечание

Для большинства графиков 'unweighted' является самым быстрым алгоритмом, сопровождаемым 'positive' и 'mixed'.

Пример: самый близкий (G, s, d, 'Метод', 'положительный')

Выходные аргументы

свернуть все

Самые близкие соседние идентификаторы узла, возвращенные как индексы узла, если s является числовым, или как имена узла, если s является именем узла. Узлы сортируются от самого близкого до дальше всего. nodeIDs пуст, если никакие узлы не на заданном расстоянии. nodeIDs никогда не содержит исходный узел s, даже если график имеет самоциклы.

Используйте H = subgraph(G,[s; nodeIDs]), чтобы извлечь подграф самых близких соседей из исходного графика G.

Соседние расстояния, возвращенные как вектор. dist(j) является расстоянием от исходного узла s к соседнему узлу nodeIDs(j).

Введенный в R2016a

Была ли эта тема полезной?