Lássuk hogyan is sikerült az algoritmusokat egymással szoros együttműködésbe
hozni: Az első kérdés, hogy milyen adatrendszerekként tároljuk az információt.
A legkisebb egység a szimplex (illetve diagram-csúcs), tudnia kell, hogy hány
dimenziós, összesen hány szimplex van, ismernie kell a szomszédait (dim+1 elemű
szimplexre mutató mutató-tömb), az
mátrix-függvény rá vonatkozó
mátrixát és érdemes a különböző átsorszámozások esetén a sorszámot eltárolni,
így csak egyszer kell az átsorszámozást végre hajtani (a szimplexek számánál
eggyel nagyobb méretű egész-tömb.5)
A következő osztály a D-szimbólum, melynek tagjai: dimenzió és a szimplexek
száma, szimplexekre mutató pointerek mátrixa (
-es mátrix, ahol
az
elemszám: minden lehetséges átsorszámozást és az átsorszámozatlan esetet
tároljuk), végül tárolunk egy duálisra mutató pointert is. Ezen adatokból és a
fenti algoritmusokból már előállíthatóak a diagramok, miután az osztály tag
függvényeiként leírtuk az algoritmusokat és egy élhozzáadó/törlő algoritmust is
csináltunk. A gráfok rajzát az xfig nevű program által ismert nyelven írtuk le,
amit később lehet manipulálni.
A lehetséges paraméter értékek számolásához szükség van egyáltalán a paraméter
fogalmára: van neki együtthatója, minimális értéke, aktuális értéke, egy
operációja (azért egy, mert a másik az eggyel nagyobb számú operáció) és egy
karakter, amivel jelöljük; végül tároljuk, hogy melyik szimplexekre hat. Ilyen
paraméterek listáját használjuk. Már tudjuk, hogy egy paraméter melyik
szimplexekre hat, jó lenne tudni, hogy egy szimplexhez melyik paraméterek
tartoznak: érdemes lenne a szimplex osztályon belül definiálni, de ezt a C++ nem
szereti (a függőségek vizsgálatakor végtelen ciklusba esne), így az
-es
sorszám szerinti rendezésben egészekkel azonosított
paraméterekre mutató pointer-tömböt alkalmazunk. A paraméter értékek
változtatására és a korábban leírt algoritmusokra további tagfüggvényeket
írtunk.
Az ismertetett algoritmusoktól egy esetben tér el a forráskód: a paraméterek ellenőrzésekor egyszerre vizsgáljuk a maximalitás és az átsorszámozás kérdését. A tagfüggvények és a megvalósítás pontos részei megtalálhatók a függelékként csatolt forráskódban.
Boroczki Lajos 2007-05-29