powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
25 сообщений из 52, страница 2 из 3
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832454
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и соответственно выходы, первый
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832455
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И второй
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832458
Сруль.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В комманду занесения петлей, поставьте дистинкт, что-то она щедрая, а копать неохота.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832486
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сруль.,

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

а в решении выше - какие-то отдельные попытки сделать какие-то элементы, но это не решает задачу целиком.
в принципе конечного результата пока никто не достиг, у invm ближе всего получилось, если-бы не последняя строка в его результате 6->6

кроме всего - пример явно не репрезентативен, например у графа могут быть две разные вершины с одинаковым весом (максимальным для графа)
что можно симулировать заменив переход с (2,3,2) на (2,3,10), тогда по идее для первого графа нужно выводить ещё и все конечные точки для вершины 2.

т.е. по факту у всех вроде как-бы какие-то потуги, куча кода, а адекватного решения ведь пока нет..
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832555
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivСруль.,

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

а в решении выше - какие-то отдельные попытки сделать какие-то элементы, но это не решает задачу целиком.
в принципе конечного результата пока никто не достиг, у invm ближе всего получилось, если-бы не последняя строка в его результате 6->6

кроме всего - пример явно не репрезентативен, например у графа могут быть две разные вершины с одинаковым весом (максимальным для графа)
что можно симулировать заменив переход с (2,3,2) на (2,3,10), тогда по идее для первого графа нужно выводить ещё и все конечные точки для вершины 2.

т.е. по факту у всех вроде как-бы какие-то потуги, куча кода, а адекватного решения ведь пока нет..

0. Очень мутно излагаешь.
1. Все узлы графа достижимы. На то он и граф.
2. Таким образом задача сводится к определению всех узлов графа и выбору самого толстого из них
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832558
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterНеобходимо "размотать" граф, и "вытащить" его за самый тяжелый узел.

У меня безрезультатно, но приятно мозг размять и подумать.

Сразу что смущает это "самый тяжелый узел", что при взвешенном графе мне не очень понятно т.к. вес не у узла, а у ребра.
Если например у вас есть узел
Код: sql
1.
(a, x, 1), (a, y, 1), (a, z, 10)


и узел
Код: sql
1.
(b, x, 4), (b, y, 4), (b, z, 4)


то самым тяжелым узлом будет b по сумме весов ребер к нему.... наверное...

"самый тяжелый узел" - это парент, к которому примыкает самое тяжелое ребро или парент, к которому примыкает самая большая сумма весов ребер?

или я чего то не понимаю тут
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832561
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самдурак конечно - в примерах моих веса одинаковые. Пусть будет так:
Код: sql
1.
(b, x, 5), (b, y, 4), (b, z, 4)
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832567
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, коллеги, отвлекся от задачи!

Сруль.Для начала в таблицу графа, я добавил номер графа.
Разбираться, где заканчивается один граф и начинается второй,
отдельная диссертация-не уму ни сердцу.

Именно это и является основной и существенной частью задачи!

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

Задача ИМЕННО в идентификации графа.

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

Т.е. берем произвольную ноду. Перечисляем все достижимые из нее узлы. Сортируем их, тупо по возрастанию номеров нод. Полученное значение используем как сигнатуру ноды.
Далее - все ноды, имеющие одинаковую сигнатуру - это один граф.
Далее - тривиально. Ищем для одинаковых сигнатур ноду с максимальным весом, все остальные ноды - подчиненные.

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

Спасибо за помощь, отдельно Ролг Хупин , попутно зарылся в графы 2017, и уже жду 2019.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832568
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222vikkivСруль.,

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

а в решении выше - какие-то отдельные попытки сделать какие-то элементы, но это не решает задачу целиком.
в принципе конечного результата пока никто не достиг, у invm ближе всего получилось, если-бы не последняя строка в его результате 6->6

кроме всего - пример явно не репрезентативен, например у графа могут быть две разные вершины с одинаковым весом (максимальным для графа)
что можно симулировать заменив переход с (2,3,2) на (2,3,10), тогда по идее для первого графа нужно выводить ещё и все конечные точки для вершины 2.

т.е. по факту у всех вроде как-бы какие-то потуги, куча кода, а адекватного решения ведь пока нет..

0. Очень мутно излагаешь.
1. Все узлы графа достижимы. На то он и граф.
2. Таким образом задача сводится к определению всех узлов графа и выбору самого толстого из них
1. Нет, в случае орграфа (ориентированного) графа - не все ноды достижимы из всех нод.
Но это, слаба богу, пока (!!!) не мой случай.
2. Да.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832569
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterПрошу прощения, коллеги, отвлекся от задачи!

Сруль.Для начала в таблицу графа, я добавил номер графа.
Разбираться, где заканчивается один граф и начинается второй,
отдельная диссертация-не уму ни сердцу.

Именно это и является основной и существенной частью задачи!

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

Задача ИМЕННО в идентификации графа.

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

Т.е. берем произвольную ноду. Перечисляем все достижимые из нее узлы. Сортируем их, тупо по возрастанию номеров нод. Полученное значение используем как сигнатуру ноды.
Далее - все ноды, имеющие одинаковую сигнатуру - это один граф.
Далее - тривиально. Ищем для одинаковых сигнатур ноду с максимальным весом, все остальные ноды - подчиненные.

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

Спасибо за помощь, отдельно Ролг Хупин , попутно зарылся в графы 2017, и уже жду 2019.

Мне нравится этот болтун. Из любой простейшей задачи - раздует проблему.
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832575
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Мне нравится этот болтун. Из любой простейшей задачи - раздует проблему.
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?

какой смысл давать ссылку на фактическое отсутствие решения?
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832577
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

уже несколько версий как есть родные встроенные в MS SQL средства для решения сетевых
(транспортных, цепи маркова) и пр. задач на планирование оптимизации по теории графов.
тем-же T-SQL / stored_procedure, Microsoft даже специально для этого компании приобретал
чтобы пользователям такие инструменты были доступны (+ интеграции с другими)
научится вызывать exec sp_execute_stored_procedure @langugage=N'R' ... и проблемы решатся.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832580
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivaleks222Мне нравится этот болтун. Из любой простейшей задачи - раздует проблему.
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?

какой смысл давать ссылку на фактическое отсутствие решения?
Там фсе есть. Глазки то протри.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832588
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222Там фсе есть. Глазки то протри.ну может конечно не проснулся ещё, но эдак всюду есть всё, ведь нужно только воображение,
всего-лишь представить что есть как хочешь - и тут-же все люди станут счастливыми,
и им ничего больше в жизни не надо

просто сложилось впечатление что в твоём варианте додумывать много чего надо,
например endpoints путей 1-6 и 5-5 , развернуть конечно можно - но поднапрягшись,
если там тысячи графов слиты в таблицу с длинами цепей по сотне шагов
(с конфликтными/спорными MAX рёбрами по весу)
то имхо - изврат, смысла нет ёжикам на кактус лезть
(или кувалдой мобильник чинить - какое сравнение удобнее)


uaggster,

ставишь на SQL Server - ML компонент (R , можно и Python),
потом включения функциональности выполняешь:
Код: sql
1.
2.
3.
4.
5.
6.
7.
sp_configure 'show advanced options',1;
go
reconfigure with override;
go
exec sp_configure 'external scripts enabled', 1;
go
reconfigure with override;

перегружаешь SQL сервис

на R терминале (под админом)
C:\Program Files\Microsoft SQL Server\MSSQL15.R\R_SERVICES\bin\x64\Rterm.exe
устанавливаешь библиотеки:
Код: powershell
1.
2.
.libPaths("C:/Program Files/Microsoft SQL Server/MSSQL15.R/R_SERVICES/library")
install.packages("igraph", lib = "C:/Program Files/Microsoft SQL Server/MSSQL15.R/R_SERVICES/library",dependencies=TRUE)

у меня первое что нагуглилось - пакет igraph (хотя когда-то что-то похожее
вроде на bioconductor делал, но там задача больше на диапазоны была)
хотя по моему чуть глючный и неизвестно как под большими нагрузками будет
вести (не коммерческий всё-таки) - но такие задачи вполне решает без кучи кода
весьма эффективно, по идее вот такое на разных выборках должно работать:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
drop table if exists my_r_test22
create table my_r_test22(a int,b int,c int)
insert into my_r_test22 values
(1,1,1),(1,2,1),(1,3,10),(2,3,2),(3,1,3),(3,6,1),(6,6,2),(4,4,1),(4,5,1),(5,4,2),(5,4,1);
--(1,1,1),(1,9,1),(1,3,10),(9,3,10),(3,1,3),(3,6,1),(6,6,2),(4,4,1),(4,5,1),(5,4,2),(5,4,1);
exec sp_execute_external_script @language=N'R'
,@input_data_1=N'select * from my_r_test22'
,@input_data_1_name=N'lo',@output_data_1_name=N'ot'
,@script=N'library(igraph);lg<-graph_from_data_frame(lo[,1:2], directed=TRUE);ot<-as.data.frame(t(5:6))
E(lg)$weight<-lo[,3];ld<-decompose.graph(lg);#plot(lg)
for(i in 1:length(ld)[1]){g<-ld[[i]];ed<-E(g)[which(E(g)$weight == max(E(g)$weight))];
for(j in unique(ends(g,ed)[,1])){pth<-all_shortest_paths(g,from=as.character(j))[[1]]
 for(k in 1:length(pth)){lne<-as.data.frame(t(c(as.integer(j),as.integer(tail(pth[[k]],1)$name))),col.names=names(ot))
 ot<-rbind(ot,lne)}}};ot<-ot[-1,];ot<-ot[order(ot$V1,ot$V2),]
as.data.frame(ot)'with result sets((a int,b int))
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832590
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivaleks222Там фсе есть. Глазки то протри.ну может конечно не проснулся ещё, но эдак всюду есть всё, ведь нужно только воображение,
всего-лишь представить что есть как хочешь - и тут-же все люди станут счастливыми,
и им ничего больше в жизни не надо

просто сложилось впечатление что в твоём варианте додумывать много чего надо,
например endpoints путей 1-6 и 5-5 , развернуть конечно можно - но поднапрягшись,
если там тысячи графов слиты в таблицу с длинами цепей по сотне шагов
(с конфликтными/спорными MAX рёбрами по весу)
то имхо - изврат, смысла нет ёжикам на кактус лезть
(или кувалдой мобильник чинить - какое сравнение удобнее)


Это быстрый, простой и понятный алгоритм идентификации графа.
Все спорные, конфликтные и прочие фантастические ребра ему по барабану.
Проблема циклов и подобной дебедени не существует.
Легко обобщающийся на ориентированные графы (ТС это не нужно).
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832605
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

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

TS просит конечные пункты найти от самой тяжелой ноды для каждого графа
хотя при наличии путей - края в принципе не такая-уж проблема выбрать.
, так что shortest_path - вполне подходящий инструмент
(т.к. позволяет многие находить, как в примере Б в доке)
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832696
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivTS просит конечные пункты найти от самой тяжелой ноды для каждого графа
хотя при наличии путей - края в принципе не такая-уж проблема выбрать.
, так что shortest_path - вполне подходящий инструмент
(т.к. позволяет многие находить, как в примере Б в доке)

Чукча не читатель?

uaggsterЗадача ИМЕННО в идентификации графа.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832705
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
declare @graph table (parent bigint not NULL, child bigint not NULL, [weight] int not NULL, gID bigint, max_lvl int, primary key(parent, child, [weight]), unique(child, parent, [weight]) );
declare @gID bigint;

insert into @graph(parent, child, [weight])
Values 
-- 1 граф
(1, 1, 1), (1, 2, 1), (1, 3, 10), (2, 3, 2), (3, 1, 3), (3, 6, 1), (6, 6, 2)
-- 2 граф
, (4, 4, 1), (4, 5, 1), (5, 4, 2), (5, 4, 1);

--	1.
;with cte as (
	select
		start_node  =parent
		,node		=child
		,[path]		=cast('/'+cast(parent as varchar(10))+'/'+cast(child as varchar(10))+'/' as varchar(max))
		,lvl		=1 
	from @graph 
	--where parent<>child

	union all

	select 
		cte.start_node
		,node	=t.child
		,[path]	=cast(cte.[path]+cast(t.child as varchar(10))+'/' as varchar(max))
		,lvl	=cte.lvl+1 
	from @graph t inner join cte on t.parent=cte.node
	where cte.[path] not like '%/'+cast(t.child as varchar(10))+'/%'
),
cte1 as 
	(select start_node, max(lvl) as max_lvl from cte group by start_node)

update a 
set a.max_lvl	=b.max_lvl
from @graph a inner join cte1 b on a.parent=b.start_node

--	2.
set @gID = 1
while 1=1 begin
	;with cte as 
		(select top 1 parent, gID from @graph where gID is null order by max_lvl desc)
	update cte set gID=@gID

	if @@ROWCOUNT = 0 break;

	while 1=1 begin
		;with cte as 
			(select parent as node from @graph where gID=@gID union select child as node from @graph where gID=@gID)
		update @graph
		set gID=@gID
		where	gID is null
			and (parent in (select node from cte) or child in (select node from cte))

		if @@ROWCOUNT = 0 break;				
	end

	set @gID = @gID + 1
end

--	result
;with cte as 
	(select *, row_number()over(partition by gID order by [weight] desc) as rn from @graph)

select distinct  
	b.gID
	,b.parent
	,a.child
	,b.[weight] as max_weight
from @graph a inner join cte b on a.gID=b.gID
where b.rn=1



gIDparentchildmax_weight1111011210113101161025422552
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39832957
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,
ну да, технически - именно так и написанно, однако это вроде только первый шаг
в цепи реализации человека который застрял и уже начал сдаваться
и отходить от исходной задачи чтобы хоть как-то продвинутся.

там то это существенная часть, то именно, а то вдруг
"Если бы графы можно было бы пронумеровать - задача была бы предельно простой, "

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

Задача ИМЕННО в идентификации графа.

court,
не работает если два ребра будут одинаково максимально тяжелыми, например для набора
-- 1 граф
(1, 1, 1), (1, 9, 1), (1, 3, 10), (9, 3, 10 ), (3, 1, 3), (3, 6, 1), (6, 6, 2)
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39833070
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,
с другой стороны да, мой косяк, недоглядел эту часть требований ТС:Если кандидатов на самую массивную ноду в графе - несколько, то нужно выбрать одну и только одну главную ноду произвольно.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39833083
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court, да, спасибо, видимо это оно.
Сейчас попробую покатать на реальных данных.

Судя по виду, я совсем чуть-чуть не допилил, запутался в трех соснах.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39833084
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkiv, блин, это вообще белое пятно для меня. Я про R и Пайтон. Спасибо, покурю.
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39835908
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати для более удобной работы с графами в SQL Server 2019 CTP 3.1 https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-shortest-path?view=sqlallproducts-allversions]добавили функцию SHORTEST_PATH
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39835925
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, я ее уже нашел, см. предыдущую страницу.

Но самый лучший вариант решения - предложил aleks222 , на самой первой странице.
Очень быстрый, нормально работает на 10+ миллионной таблице, и, собственно, дающий то, что нужно.
Даже адаптации не понадобилось.

Только я нихера не понял, как он работает. Просто воткнул как абракадабру в текст хранимки и всё.
aleks222 , может статья есть какая с разбором?
...
Рейтинг: 0 / 0
Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
    #39835975
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterАга, я ее уже нашел, см. предыдущую страницу.

Но самый лучший вариант решения - предложил aleks222 , на самой первой странице.
Очень быстрый, нормально работает на 10+ миллионной таблице, и, собственно, дающий то, что нужно.
Даже адаптации не понадобилось.

Только я нихера не понял, как он работает. Просто воткнул как абракадабру в текст хранимки и всё.
aleks222 , может статья есть какая с разбором?

Там фсе просто, как калашников.

1. Присваиваем всем вершинам уникальные идентификаторы.
2. Для каждой пары связанный вершин выбираем и заменяем идентификатор на меньший из двух, если такой есть.
3. В результате идентификатор вершин каждого графа принимает значение минимального идентификатора из п.1, который принадлежал графу.

Худшая оценка числа циклов = максимальное число узлов в графе. Для линейного графа.
Для сильно связанных графов - число циклов меньше.

Для очень большого количества графов - алгоритм можно ускорить.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отсортировать (в кавычках) взвешенный граф. Возможно ли это на TSQL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]