Rendezés élszínek és távolságok alapján

Most vegyünk egy másik fajta, szintén lexikografikus jellegű rendezést M96 cikk alapján. A következő lépésekre van szükségünk:
  1. Bevezetünk egy sorszámozást, ami minden adott kezdőpontú, összefüggő D-szimbólum csúcsainak sorszámát megadja.
  2. Az előbbi sorszámozás alapján veszünk egy távolságot.
  3. A csúcsok távolsága alapján veszünk egy rendezést adott kezdőpontú diagramok között.
  4. Felsoroljuk az összes lehetséges diagramot növekvő sorrendben.
  5. Eközben eldobáljuk a rosszakat.

Algoritmus 3.1   Legyen $ (\Sigma_I,\mathcal{D}(D_1))$ egy D-szimbólum diagramja $ D_1$ kezdőponttal. Számozzuk meg a csúcsokat $ 0,1,\ldots ,n$ sorszámokkal. $ D_1$ sorszáma 1. Tegyük fel, hogy megsorszámoztuk a $ D_1,\ldots,D_r$ csúcsokat. A következő csúcs:

A diagram összefüggő, ezért minden csúcsát megsorszámozza az algoritmus.

Bármely két elem távolságát meghatározhatjuk úgy, hogy az egyik elemmel indított sorszámozás szerint a második elemnek a sorszámát vesszük. $ D_x$ és $ D_y$ távolságának jelölése: $ D_xD_y.$

Ez a távolság a következő rendezési algoritmushoz vezet:

Algoritmus 3.2   Legyenek $ (\Sigma_I,\mathcal{D}(D_1))$ és $ (\Sigma'_{I'},\mathcal{D}'(D_{1'}))$ két D-szimbólum diagramjai, kitüntetett kezdőponttal. Azt mondjuk, hogy $ \mathcal{D}<\mathcal{D}'$ a következő tulajdonságok alapján:
  1. $ \vert I\vert<\vert I'\vert$ (dimenzió)
  2. Ha megegyeznek: $ \vert\mathcal{D}\vert<\vert\mathcal{D}'\vert$ (D-szimbólum elemszáma)
  3. Ha egyenlőség áll: $ \mathcal{D}$ és $ \mathcal{D}'$ elemeinek távolságait hasonlítjuk össze:
    • $ D_1\sigma_d D_1<D_{1'}\sigma_d D_{1'};$ ha egyenlőség áll, $ D_2\sigma_d D_2<D_{2'}\sigma_d D_{2'};\ldots;$ ha egyenlőség áll, $ D_n\sigma_d D_n<D_{n'}\sigma_d D_{n'}$ ($ n-1$ -ig is elég menni;)
    • Egyenlőség esetén: $ D_1\sigma_{d-1} D_1<D_{1'}\sigma_{d-1} D_{1'};
\ldots;D_n\sigma_{d-1} D_n<D_{n'}\sigma_{d-1} D_{n'};$

      $\displaystyle \vdots$    

    • Egyenlőség esetén: $ D_1\sigma_0 D_1<D_{1'}\sigma_0 D_{1'};
\ldots;D_n\sigma_0 D_n<D_{n'}\sigma_0 D_{n'}.$
Ha végig egyenlőség állt, a két diagram izomorf.

Most már meg tudjuk különböztetni a diagramokat, így fel is tudjuk sorolni a különbözőeket:

Algoritmus 3.3   Egy backtrack3 algoritmust használunk a felsorolásra. Minden lépésben megpróbáljuk a soron következő élt kihagyni, majd hozzáadni; és az élek sorának végére érve ellenőrizzük, hogy jó diagramot kaptunk-e. Ha igen, eltároljuk későbbi elemzésre, különben eldobjuk. Az éleket a forrás, a cél és az operáció sorszámával azonosítjuk, ahol a forrás mindig határozottan kisebb, mint a cél, ezzel tudjuk biztosítani az él és az azonosítás közötti egy-egy értelmű hozzárendelést.

Az algoritmus bemenete a $ d$ dimenzió és a diagram csúcsainak $ n$ száma. Minden állapotban a következő lépéseket tesszük meg:

Lemma 3.4   Az $ \vert I\vert$ dimenziós $ \vert\mathcal{D}\vert$ elemű D-szimbólumok lehetséges diagramjai rendezetten szerepelnek alg:backtrack algoritmusbeli rendezett adatrendszerben. (De nem tartozik minden diagramhoz D-szimbólum, mert még nem vizsgáltuk meg az $ \mathcal{M}$ mátrix-függvényeket.)

Mivel felsoroltuk az összes lehetséges diagramot, és csak az azonosakat, illetve az $ \mathcal{R}$ mátrix-függvény alapján rosszakat hagytuk el, ezért az állítás triviális. Az adatrendszert nem részletezzük, mivel egy egyszerű láncolt lista is megteszi egyelőre, amíg nem túl nagy a jó diagramok száma. Legalább 9-10 elemű D-szimbólumok felsorolása esetén viszont már érdemes lenne AVL vagy piros-fekete fában tárolni a lehetséges diagramokat. (Magasabb szintű programozási nyelvekben halmazként.)

Boroczki Lajos 2007-05-29