2010-08-22 3 views
6

Jeśli mam zestaw znaczników (< 100) i zestaw obiektów (~ 25000), gdzie każdy obiekt ma pewien podzbiór znaczników, czy znasz istniejącą strukturę danych, która pozwoliłaby na szybkie pobieranie tych obiektów, które spełniają niektóre funkcje boolowskie tagów?struktura danych w celu przyspieszenia wyszukiwania w tagach w pamięci w funkcji boolowskiej znaczników?

Dodanie/usunięcie znaczników i obiektów nie musi być szczególnie szybkie, ale wybór tych obiektów z tagami spełniającymi funkcję boolowską powinien być.

Teraz, gdy napisałem moje pytanie, wygląda na to, że opisuję bazę danych w pamięci, ale początkowo myślałem o jakiejś strukturze drzewa binarnego dla obiektów, gdzie dla każdego oddziału, biorąc lewy/right branch będzie równoznaczne z decyzją o/have-have not tag. Ale to nie pozwoliłoby na tagi "nie trać opieki"? Pytam, gdy zastanawiałem się, czy zostało to zrobione wcześniej i trudno jest google dla struktur danych.

  • Z góry dziękuję - Paddy.
+0

Zauważam, że odpowiedź tutaj: http://stackoverflow.com/questions/3538322/many-to-many-data-structure-in-python jest użycie DB w pamięci. – Paddy3118

+0

Funkcja boolowska może być różna, powiedzmy, na podstawie danych wprowadzonych przez użytkownika lub jest to tylko jedna funkcja (lub znany zestaw funkcji)? Jeśli nie, baza danych wygląda jak najlepsza opcja, a język zapytań prawdopodobnie będzie najlepszym wyborem. W przeciwnym razie można symulować bazę danych i stopniowo budować drzewo decyzyjne w zależności od danych wejściowych i pamięci podręcznej tego drzewa (działa jak indeks). – dirkgently

+0

Hi dirkgently, Funkcja byłaby oparta na danych wejściowych od użytkownika, a wystarczająco szybko byłoby trudno ocenić tak szybko w projekcie, ale ponieważ jest wcześnie - chciałbym zbadać opcje. Dzięki. – Paddy3118

Odpowiedz

6

Oto sugestia: Użyj tablicy bitowej dla każdego znacznika, z tylu elementów, ile jest obiektów; każdy indeks, który reprezentuje jeden obiekt. Wartość dla każdego indeksu wynosi 1, jeśli ten obiekt ma ten znacznik.

Funkcje boolowskie na znacznikach są wówczas operacjami szybkiego ustawiania w tej macierzy bitowej. Wynikowa tablica bitowa dostarcza dokumentów spełniających kryteria.

To niezbyt wydajne, jeśli tagi lub obiekty często się zmieniają, ale być może dotyczy to Ciebie.

+0

Dooh, oczywiście! Dzięki. – Paddy3118

+0

@ paddy3118 Cieszę się, że jest to przydatne. –

+1

Indeks bitmapowych AKA: https://en.wikipedia.org/wiki/Bitmap_index –

0

Jak szybko potrzebujesz? Jak złożona jest twoja funkcja boolowska, tj. Ile tagów jest używanych w pojedynczej typowej funkcji?

Co powiesz na wykorzystanie bazy danych SQL w pamięci? Następnie można wyrazić funkcję boolową za pomocą prostego zapytania SELECT.