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);

Figure contains an axes. The axes contains an object of type graphplot.

Определите, какие узлы находятся в радиусе 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')

Figure contains an axes. The axes contains an object of type graphplot.

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

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)

Figure contains an axes. The axes contains an object of type graphplot.

Определите, какие узлы находятся в радиусе 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)

Figure contains an axes. The axes contains an object of type graphplot.

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

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

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

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

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

свернуть все

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

Пример: G = graph(1,2)

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

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

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

Пример: nearest(G,3,1)

Пример: nearest(G,'a',5)

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

Пример: nearest(G,3,1)

Пример: nearest(G,'a',2.5)

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: [nodeIDs,dist] = nearest(G,s,5,'Method','unweighted','Direction','incoming')

Примечание

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

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

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

Пример: nearest(G,s,d,'Direction','incoming')

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

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

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

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

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

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

'unweighted'

Breadth-первый расчет, который обрабатывает все веса ребер как 1.

'positive'

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

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

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

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

Примечание

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

Пример: nearest(G,s,d,'Method','positive')

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

свернуть все

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

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

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

Введенный в R2016a