Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

codegeneration   Найти похожие ветки 

 
neuro   (2003-06-11 20:54) [0]

Кто-нть сталкивался с проблемой кодегенерации на графе?

Есть граф, он представляет автомат, мы по нему этот автомат в некотором представлении записываем. Это просто. А вот если, граф стягивается по интервалам своим, и надо сквозь этот (итеративный) процесс сделать кодегенерацию..Если ничего не понятно, то могу еще подробнее =).


 
wicked   (2003-06-11 21:46) [1]

задача интересная, но лучше поподробнее.... :)


 
neuro   (2003-06-12 00:30) [2]

Значицца так =)
Есть алгоритм выделения оных интервалов (если интересно, могу его дать, хотя он на проблему не влияет). Интервал -- подграф орграфа, каждый контур которого проходит через входную точку подграфа.

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

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

Дык вот. Этот процесс позволяет представить автомат как несколько вложенных циклов. Вот..И надо по этим всем итерациям (когда граф стягивали) восстановить код автомата, при условии, что код исходного автомата есть..У меня все это сделано, но вот дробящиеся вершины ОЧЕНЬ портят жизнь..Никак не могу справится =(

Если кто знает Tcl/Tk могу выслать на мыло скриптик, который это дело делает и пару примеров..Может укажете, где грабли..


 
neuro   (2003-06-12 18:06) [3]

Ну что? Так никто и не знает? Тогда хоть апну..


 
neuro   (2003-06-13 17:04) [4]

ПИПЛ!!!ГОРЮ!!!ХЕЛП!!!


 
Soft   (2003-06-13 17:41) [5]

Кинь куда-то(на свой сайт) рисунок, того что ты хочешь получить. Понятнее будет.


 
neuro   (2003-06-16 21:32) [6]

Гы.Рисунок могу намылить всем желающим, ибо сайта у мене нету. (тот что есть -- уже не мой). Если на мастерах можно выкладывать что-нть, то могу.

Вкратце. Дан граф:
1
|
2
|\
3 |
/| |
\4/
|
5
(1->2,2->3,3->4,4->2,4->3,4->5). Дуги помечены: 1->2 - d12, и т.п.
Надо что-то типа:
d12
Loop begin;
d23
d34
Loop begin;
Alternative begin;
Alt;
d43
Alt;
d42
break
Alternative end;
Loop end;
Loop end;

Мой пример тривиален =) и он уже реализован. А вот на больших графах все гораздо хуже. Все происходит так. Выделяются некоторые множества в графе (про которые легко проверяется их зацикленность) -- они наз. интервалами. Строим отдельно для каждого интервала свой код примерно так:
INTERVAL1:
d12
TO_INTERVAL2

INTERVAL2:
Loop begin;
d23
TO_INTERVAL3
Loop end;

И т.п. Потом проходимся по интервалам (после факторизации) и правим код - если ссылка на вершину, которая включаена в наш интервал теперь, то ссылку заменяем на код того интервала, куда ссылались, если ссылка на себя, то ее заменяем на continue, иначе переписываем ссылку в соотв. с новыми номерами вершин (от итерации к итерации вершины, вообще говоря, нумеруются по-разному).

Вот. А вот, если разбили вершину, то что делать? Я и так и эдак к этому подходил..Ни в какую..Желающим могу послать исходники моих потуг.Правда они на Tcl.



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

Форум: "Потрепаться";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-7427
eLVik
2003-06-23 11:50
2003.07.03
Поиск файлов


1-7400
antoniz
2003-06-21 14:33
2003.07.03
Как обратиться к интерфейсу Excel


3-7349
Катенок
2003-06-10 09:34
2003.07.03
Delphi 6 база foxpro?


3-7289
Stelius
2003-06-07 22:54
2003.07.03
По поводу сортировки


14-7655
Zergling
2003-06-16 09:37
2003.07.03
Как удалить сие важные для системы WIN2000 файлы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский