Speciális adatszerkezetek 1. Rész: Aciklikus Irányított Gráf (DAG)

**folyamatban**

azt akartam, kick off, ez a sorozat egy adatszerkezet, struktúra, amely mind a fejlesztők közeli ismerős, de lehet, hogy nem is tud róla: Irányított Aciklikus Grafikonok. “Soha nem hallottam erről. Nem ismersz engem!”mondhatod, de ez a grafikon teszi lehetővé a verziókezelést. A Git egy aciklikus gráf. Ebben a bejegyzésben, adok neked egy kis magas szintű tudást a Dag-okról, majd megmutatom, hogyan lehet egy kódot készíteni.

mi az a DAG?

tehát mit jelent ez egyáltalán? A DAG egy olyan grafikon, amely egy irányba áramlik, ahol egyetlen elem sem lehet önmagának gyermeke. Tehát a legtöbben ismerik a Kapcsolatotlistákat, fákat, sőt grafikonokat is. A DAG nagyon hasonlít az első kettőhöz, a harmadik végrehajtásához.

hasonló a fa, de nem egészen ugyanaz

figcaption>

a minimum, a dag lesz 4 dolog:

  1. csomópontok: egy hely az adatok tárolására.
  2. irányított élek: Nyilak, amelyek egy irányba mutatnak (az a dolog, ami ezt az adatszerkezetet különbözteti meg)
  3. néhány nagy ősi csomópont, szülők nélkül. (Szórakoztató tény: a legtöbb ősfa valójában dag, nem pedig fák, mert az unokatestvérek valamikor összeházasodnak egymással.)
  4. levelek: gyermek nélküli csomópontok

készítsünk egyet

tehát írjunk néhány kódot. Először is, hozzunk létre egy konstruktort két tulajdonsággal, és hívjuk DAG-nak.

function DAG() {
this.nodes = ;
this.vertices = {};
}

ezután hozzáadunk egy módszert. Látod, mit csináltam?

DAG.prototype.add = function(node) {
if (!node) { return; }
if (this.vertices) {
return this.vertices;
}
const vertex = {
node: node,
incoming: {},
incomingNodes: ,
hasOutgoing: false,
value: null
};
this.vertices = vertex;
this.nodes.push(node);
return vertex;
};

tehát hogyan működik ez? A csúcsobjektum az, ahol minden jó dolog történik. Hozzáadunk egy csomópontot, egy bejövő csomópont objektumot, és egy tömböt az összes nevükkel, egy logikai értéket, hogy mutat-e valamit és értéket. Egy kicsit később eljutunk ezekhez.

most lehetővé teszi, hogy adjunk néhány élek, hogy dolgokat csatlakozni egymáshoz. Mielőtt ezt megtehetnénk, létre kell hoznunk egy segítő funkciót, amely ellenőrzi, hogy meglátogattuk-e ezt a csomópontot vagy sem. Hívjuk látogatásnak.

function visit(vertex, fn, visited, path) {
const name = vertex.name,
vertices = vertex.incoming,
names = vertex.incomingNames,
len = names.length,
i;
if (!visited) {
visited = {};
}
if (!path) {
path = ;
}
if (visited.hasOwnProperty(name)) {
return;
}
path.push(name);
visited = true;
for (i = 0; i < len; i++) {
visit(vertices], fn, visited, path);
}
fn(vertex, path);
path.pop();
}

Mi történik itt

adjuk meg az elismerést, ha Tényleg Miatt

Kutatja ezt a cikket olvastam néhány nagy hozzászólások bámulatosan okos emberek, de a legtöbb információ jött nekik. Az elmélet nagy részét úgy tanultam meg, hogy elolvastam ezt a jól megírt posztot a Dag-okról és a verzióvezérlésről. A kód itt kapott minden ihletet a emberjs forráskód és a ragyogó szerzők mögötte. Én is olvastam számos más cikkek, blogbejegyzések kapcsolatos DAGs nagy emberek szerte az interneten. Köszönjük, hogy elolvasta!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük