2010-12-02 5 views
0

Il m'arrive d'avoir une base de données avec une table qui contient toutes les combinaisons possibles de sujets, de verbes et de compléments possibles.Structure de données d'arbre et données

Cette table ressemble à une table de jonction avec les colonnes Id correspondance à mes autres tables (table sujet, table verbes, complète le tableau).

Dans mon programme, j'utiliser une structure arborescente pour représenter la table de jonction et chaque noeud est donc simplement un objet avec une propriété ID (subjectId ou verbId ...).

Ce que je ne comprends pas bien est de savoir où mettre les données réelles Id cartes pour. Je croyais que j'avais deux options:

  1. rendre les données une propriété de chaque nœud
  2. rendre les données un nœud

Dans le premier cas, le seul traitement que je fais est de charger le table de combinaison et créer l'arbre. Et quand j'ai besoin des données qui vont avec, je le charge à la demande. Mais pour garder une trace de la position des données dans l'arbre, les données ont une propriété qui pointe vers le nœud auquel elles appartiennent (un hack évidemment pour éviter d'avoir à chercher dans tout l'arbre (même si ce n'est qu'un O (log (n)) opération.) En outre, je ne traiterai avec un nœud dans le programme entier, car il est un moyen pratique d'accéder aux enfants du nœud alors.

Dans le second cas, si je devais faire les données réelles un nœud, je devrais charger toutes les données à la fois avant de le consommer.En outre, j'ai encore besoin de créer une copie des données si les «parents parentaux de noeud» utilisent les mêmes données

Y a-t-il un moyen propre de réaliser ce que j'essaie de faire? Énumérés ci-dessous est ce que J'ai actuellement

public class Node<Word>{ 

    public Word Data { get; set; } 

    public Guid ID { get; set; } 

    ..... // other necessary tree like stuff 

} 

public class Word 
{ 
    public Node NodeItem { get; set; } 
} 

Ou

public class Word : Node{} 

J'espère que la question est assez claire. laissez-moi savoir si vous avez besoin de plus de détails et je vais mettre à jour la question avec elle. Merci.

Répondre

0

La recherche dans l'arbre que vous mentionnez ne sera en aucun cas O (logn) car cet arbre n'est pas un arbre de recherche binaire. C'est un graphique Undirected, vous pouvez le dire, vous devez effectuer une recherche soit en utilisant BFS ou DFS. Si je visualise votre situation correctement puis sur l'interface utilisateur, vous avez un arbre supposé dans un panneau de gauche de votre fenêtre et sur le panneau de droite vous voulez montrer les détails du nœud.

si c'est l'interface utilisateur ou votre situation puis

je dirais ne pas stocker des données dans l'arbre, charge sur demande par exemple lorsque l'utilisateur sélectionner un nœud, vous aurez l'ID de ce nœud, récupérer les données avec l'ID et l'affichage.

cette façon, vous pouvez éviter le chargement possible de toutes les données qui ne peuvent pas être à la fois exiger.

+0

oups! en effet ce n'est pas un arbre binaire ..! :-) – ak3nat0n

Questions connexes