Strutture dati del grafico e formato del journal per mini-IDE

2

Sfondo:

Sto scrivendo un piccolo / parziale IDE . Il codice viene convertito / analizzato internamente in una struttura di dati del grafico (per la navigazione veloce, il controllo della sintassi, ecc.). Funzionalità per annullare / ripristinare (anche tra sessioni) e ripristinare da crash è implementato scrivendo e leggendo dal journal. Il journal registra modifiche al grafico (non alla fonte).

Domanda:

Spero di ricevere consigli su una decisione sulle strutture dei dati e il formato del diario.

Per il grafico vedo due possibili versioni:
ga I bordi del grafico sono implementati nel modo in cui un nodo memorizza i riferimenti ad altri nodi tramite l'indirizzo di memoria
gb Ogni nodo ha un ID. C'è una mappa di ID-to-memory-address. Il grafico utilizza ID (anziché indirizzi) per connettere i nodi. Spostarsi lungo un bordo da un nodo all'altro ogni volta richiede una ricerca nella mappa ID-indirizzo.

E anche per il journal:
j-a Esiste un nodo corrente (come la directory di lavoro corrente in una shell + l'impostazione del file system). Il journal contiene voci come "crea nuovo nodo e connetti a corrente", "collega primo figlio del nodo corrente" (ID relativo)
j-b Il journal utilizza ID assoluti, ad es. "delete edge 7 - > 5", "elimina il nodo 5"

Potrei ad es. combinare g-a con j-a o combinare g-b con j-b . In linea di principio anche g-b e j-a dovrebbero essere possibili.

[Il mio primo / originale tentativo è stato ga e una versione di jb che utilizza indirizzi, ma questo ha causato gravi restrizioni: i nodi non possono cambiare i loro indirizzi (o journal dovrebbe tenerne traccia), e usare journal tra due sessioni è un casino (o anche impossibile)]

Mi chiedo se la variante a o la variante b o una combinazione sarebbe una buona idea, quali vantaggi e svantaggi avrebbero e soprattutto se alcune varianti potrebbero causare problemi più tardi.

    
posta matec 08.02.2014 - 18:02
fonte

1 risposta

2

Ci sono 2 strutture dati comuni per rappresentare grafici: elenchi di adiacenza e matrici di adiacenza. Sono elencati qui con le loro complessità di tempo / spazio. Scegli quello più appropriato in base alla complessità / densità (stimata) del tuo grafico e alle operazioni che ti aspetti di fare di più.

Nella mia esperienza, ho sempre preferito una matrice di adiacenza diretta (array 2D di bool o float che memorizza l'esistenza o il peso del bordo).

  • È semplicissimo scrivere / ragionare
  • Non ho mai avuto la necessità di aggiungere / rimuovere i vertici dopo il tempo di costruzione iniziale.
  • L'operazione più comune per i miei grafici è quasi sempre una query, ovvero O (1).
  • Non ho avuto grafici abbastanza grandi da preoccupare dello spazio.

Detto questo, hanno la stessa interfaccia, quindi sono scambiabili.

    
risposta data 09.02.2014 - 19:22
fonte

Leggi altre domande sui tag