eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPytanie z algorytmiki › Re: Pytanie z algorytmiki
  • Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.PO
    STED!not-for-mail
    From: Piotr Chamera <p...@p...onet.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: Pytanie z algorytmiki
    Date: Sun, 22 May 2011 10:24:56 +0200
    Organization: http://onet.pl
    Lines: 70
    Message-ID: <irah8r$4uu$1@news.onet.pl>
    References: <ir8h3q$qnv$1@news.onet.pl> <ir8m7l$e55$1@news.onet.pl>
    NNTP-Posting-Host: public37386.xdsl.centertel.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: news.onet.pl 1306052699 5086 79.163.146.10 (22 May 2011 08:24:59 GMT)
    X-Complaints-To: n...@o...pl
    NNTP-Posting-Date: Sun, 22 May 2011 08:24:59 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.17) Gecko/20110414
    Lightning/1.0b2 Thunderbird/3.1.10
    In-Reply-To: <ir8m7l$e55$1@news.onet.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:190570
    [ ukryj nagłówki ]

    W dniu 2011-05-21 17:37, Piotr Chamera pisze:
    > W dniu 2011-05-21 16:10, Jacek Czerwinski pisze:
    >> Obiekt ma listę (być może pustą) Obiektów których 'aktywacji' sam wymaga
    >> (pewna czynność tzn 'aktywacja' nad nimi musi być chronologiczna).
    >> Obrazowo można myśleć o obiektach jak o stworzonych ale nie
    >> wystartowanych service'ach.
    >>
    >> Listę (tablicę, obojętne) takich obiektów posortować.
    >> a) pewnie algorytmika zna coś gotowego
    >> b) mili widziane (bardzo, nawet można pomyśleć o zerwaniu algorytmu
    >> wyjątkiem), kontrola czy z tych zależnościach nie ma sprzeczności.
    >>
    >> Obiekty dziedziczą ze wspólnego przodka.
    >>
    >> Ewentualnie
    >> c) algorytm bez sortowania, wykonuj wyżej wspomnianą czynność dla
    >> wszystkich zaczynając od przypadkowego obiektu, poprzedzając
    >> rekurencyjnie akcją dla wymaganych, (profilaktycznie odnotowując co już
    >> było wykonane). Nie jest zbyt brutal-force?
    >> W razie sprzeczności, "jakoś" się to wykona. Sortowanie bardziej mi się
    >> podoba, bo da wyjątek bardzo wcześnie.
    >
    > Może tak: zbudować graf skierowany, sprawdzić czy jest acykliczny (jeśli
    > jest cykl, to sprzeczność w zależnościach), posortować topologicznie.

    Nie wiem jaki dokładnie jest cel, ale w ramach nauki Lispu wypociłem
    coś jak poniżej (w Common Lispie) na bazie przeglądania grafu wszerz
    (wg Cormena).
    Procedura sprawdza czy graf jest acykliczny, ale na tej bazie można
    wykonać i inne operacje na grafie (np. wylistować wszystkie zależności
    danego wierzchołka - wywołać dfsa? dla żądanego wierzchołka i
    kolekcjonować informacje o odwiedzonych obiektach).

    Przykładowe obiekty mają taką strukturę
    (defstruct obj
    name ;nieużywany, ale przydaje się kiedy chcemy wydrukować graf
    dep ;krawędzie grafu
    )

    (obj-dep x) jest akcesorem do listy zależności (krawędzi grafu)



    (defun check (objects)
    (let ((markers (make-hash-table :test 'eq)))
    (labels ((work-on (x)
    "oznacz wierzchołek jako obecnie przetwarzany"
    (setf (gethash x markers) 'working))
    (finish-with (x)
    "oznacz wierzchołek jako przetworzony wraz z dziećmi"
    (setf (gethash x markers) 'finished))
    (get-marker (x)
    "sprawdz co wiemy o wierzchołku (domyślnie - jeszcze nieodwiedzony)"
    (gethash x markers 'virgin))
    (dfsa? (v)
    "test czy graf widoczny z wierzchołka v jest acykliczny"
    (work-on v)
    (loop :for x :in (obj-dep v) :do
    (case (get-marker x)
    (virgin (dfsa? x))
    (working (return-from check
    (format nil "w grafie jest cykl")))
    (finished nil)))
    (finish-with v)))
    (loop :for v :in objects :do
    (when (eq 'virgin (get-marker v))
    (dfsa? v)))))
    (format nil "w grafie nie ma cykli"))


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: