Je recherche une structure de données très efficace pour le stockage de données similaire à la suivante.
Étiquettes d'identification Order1 Order2 -------------------------- 1 1,2 1 1 2 2,5 2 3 3 1,7 4 7 4 6 3 0
J'ai besoin de pouvoir interroger cette structure de manière à ce qu'elle me donne une liste de tous les identifiants contenant une expression de balises - support AND
et OR
et NOT
opérations. Par exemple. ((1 ou 2) et non 7)
Je dois également pouvoir spécifier l'ordre des résultats (Order1 ou Order2) et pouvoir spécifier le nombre maximum de lignes renvoyées avec un décalage facultatif. La performance pour l'extraction des premiers 30 à 100 résultats est essentielle.
Enfin, j'ai besoin d'un moyen peu coûteux de rechercher des "relations de balise" par exemple, je veux savoir quelles balises "se rapportent" aux balises (1 OU 2) et à quelle fréquence. Signification des balises qui apparaissent dans le même ensemble que 1 OU 2 ... classées par fréquence.
Avez-vous une idée de quelle structure de données (ou ensemble de structures) serait très efficace pour ce type de travail?
(Je voudrais l'utiliser comme preuve de concept pour la refonte des pages balisées de la famille de sites SE)
la source
Réponses:
Ce n'est pas exactement la réponse d'une structure de données efficace, mais plutôt une élaboration sur les commentaires de @bbejot et @Kaveh donnant un argument de la main pour expliquer pourquoi, étant donné la question actuelle, nous ne devrions pas nous attendre à quelque chose qui fait beaucoup mieux que la recherche dans le base de données entière. L'argument est basé sur une réduction de SAT, l' hypothèse de temps exponentielle et beaucoup d'ondulations de la main.
Nous ne devons pas nous attendre à une recherche efficace sur la longueur de la requête (par réduction en SAT). Nous ne devrions pas non plus espérer mieux que de regarder tous les éléments de la base de données par l'hypothèse de temps exponentiel.
la source
C'est une réponse assez simple, mais je pense efficace:
Map Tag ([Id],[Id])
Map Id (Set Tag)
Id
la source