exponenta event banner

ближайший

Ближайшие соседи в радиусе

Описание

пример

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

Примечание

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

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

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

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

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

ВыборОписание
'auto' (по умолчанию)

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

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

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

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

'unweighted'

Широта - первое вычисление, которое рассматривает все веса кромок как 1.

'positive'

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

'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