Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Алгоритм   Найти похожие ветки 

 
asdqwer   (2003-12-28 19:40) [0]

Нигде не встретил алгоритм поиска наибольшего полного подграфа данного графа (полный граф - это тот, у которого соединены любые две вершины). Заранее спасибо.


 
SergP ©   (2003-12-28 23:27) [1]

Я прикинул. Получается нечто типа:

type subgraf:array[1..N] of integer;
...
var
n:integer;
s:array [1..N,1..N] of boolean;
k,m:subgraf;
// s[a,b]=true если вершины a и b соединены, иначе false
// n - кол. вершин графа
...
procedure SearchMaxSubgraph;
begin
k[0]:=1;
m[0]:=1;
fs(1);
// после выполнения процедуры в m[0] имеем размерность
// макссубграфа, а в m[1]...m[m[0]] номера вершин исходного
// графа, которые входят в субграф.
end;
...
procedure fs(r:integer);
var
u:integer;
x:boolean;
begin
if r<=n then
begin
for u:=r to n do // перебираем все оставшиеся вершины
begin
x:=true;
for i:=1 to k[0] do if not s[k[i],u] then x:=false;
// устанавливаем x в false если эту вершину нельзя добавить
// в уже найденый субграф
if x then
begin
inc(k[0]); // если вершина подходит, то добавляем ее.
k[k[0]]:=u;
if k[0]>m[0] then m:=k; // если найденый субграф больше
//предыдущего найденого то запоминаем его
fs(u+1);// рекурсивный вызов функции для дальнейшего поиска
dec(k[0]); // возвращаемся к предыдущему субграфу для
//проверки его со следующими вершинами
end;
end;
end;
end;

Только я не проверял, а писал прямо в форум. Так что кое-что придется подправить. Код может быть немного неправильным и неоптимальным, но здесь главное натолкнуть тебя на мысль.


 
SergP ©   (2003-12-28 23:37) [2]

Надеюсь что код сам подправишь...

Кстати даже если окажется что я где-то ошибся, то все равно хорошо что что-то написал. Так как щас кто-нить будет меня критиковать за то что неправильно написали и предлагать свой код, а иначе бы просто никто не ответил и ветка бы "ушла в никуда". :-)))


 
asdqwer   (2003-12-29 08:48) [3]

Большое спасибо, SergP, однако сложность данного алгоритма довольно велика: O(n^n). Хотелось бы порядка O(n^3).


 
SergP ©   (2003-12-29 09:32) [4]


> asdqwer (29.12.03 08:48) [3]
> Большое спасибо, SergP, однако сложность данного алгоритма
> довольно велика: O(n^n). Хотелось бы порядка O(n^3).


Мне просто не приходилось заниматься графами. Да и этот кусок проги я прикинул просто из-за интереса к всякого рода подобным задачкам...

И хотя я немогу оценить сложность моего алгоритма. Но мне кажется что она все-таки не O(n^n), а поменьше будет.


 
SergP ©   (2003-12-29 11:00) [5]

Тут я еще вот о чем подумал:

1.Допустим имеется массив описывающий граф:
...1.2.3.4.5.6.7.8
-|-----------------
1|
2|.T
3|.T.F
4|.T.T.F
5|.T.F.T.T
6|.T.T.T.T.F
7|.T.T.T.T.T.T
8|.F.T.T.T.T.T.T

2.Выбираем из указаной части масива элементы F (false):

Получаем:
(8 , 1)
(5 , 2)
(3 , 2)
(4 , 3)
(6 , 5)

3.Теперь из каждой пары чисел нам нужно выкинуть не менее одного, так чтобы при этом в общем выкинуть минимальное количество чисел.

В данном примере выкидываем 8 , 3 , 5. Значит подграф с оставшимися вершинами 1,2,4,6,7 является наибольшим полным подграфом нашего графа.

Вот только не знаю как реализовать сам алгоритм для этого, вернее для 3-го пункта.


 
DAC ©   (2003-12-29 11:54) [6]

Данная задача является классической задачей теории сложности. Носит название "Задача клика". Доказано, что она NPC-задача. На данный момент представляется маловероятным найти полиномиальный алгоритм её решения (врядли можно надеятся на оценку O(n^3)). Для получения более полной информации об этой задаче рекомендую обратиться к книжке М. Гэри, Д. Джонсон "Вычислительные машины и труднорешаемые задачи".


 
SergP ©   (2003-12-29 16:21) [7]

2 asdqwer:

Попробуй спросить об алгоритме здесь:
http://algolist.manual.ru/forum/
Может там тебе помогут. Как раз это форум с как бы это сказать - "математическим уклоном"..



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
14-63404
VictorT
2003-12-26 14:57
2004.01.20
Надежда умирает последней


9-62958
K.o.Z
2003-06-14 23:49
2004.01.20
Проверка на видимость


1-63166
Delta
2004-01-06 15:09
2004.01.20
Подключить NetApi32.dll


1-63082
Ega23
2004-01-08 15:49
2004.01.20
try except


14-63348
xman
2003-12-29 15:45
2004.01.20
Сетевые шахматы