Информация об изменениях

Сообщение Откомпилированное дерево поиска. от 25.12.2017 18:54

Изменено 25.12.2017 18:56 BLov

Откомпилированное дерево поиска.
Есть задача быстрого поиска поименованных объектов в древовидной структуре напоминающей файловую систему с каталогами и файлами, файлы это объекты типа "1" а каталоги это объекты типа "2"

Проще привести пример —


дир1:объект1
дир1:объект2
дир1:объект3
дир1:объект4
дир2:объект5
дир2:объект6
дир2:объект1
дир2:объект3
дир3:объект10
дир3:объект11
дир3:объект12
дир3:объект14

В рамках директории объекты уникальны. В аналогии с файловой системой — не могут быть два файла с одним и тем же именем.
Директории также уникальны.

Пример близкий к реальному:

\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\eeeee
\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\hhhhh
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\eeeee
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\jjjjjj
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\eeeee
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\wwwww
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\eeeee
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\ffffff

В скобках перед двоеточием это не часть строки дир-а, а некий ID для этого дира.

Требуется :
1) быстро искать по запросам типа
1) найти ID для дир=\aaaa\eeee\yyyyy\ooooo,
2) найти объект \aaaa\eeee\yyyyy\vvvvv если ID=10
2) Хранить это в неком блобе (двоичный файл), который при загрузке можно уже превратить в некое дерево или что угодно.
Откомпилированное дерево поиска.
Есть задача быстрого поиска поименованных объектов в древовидной структуре напоминающей файловую систему с каталогами и файлами, файлы это объекты типа "1" а каталоги это объекты типа "2"

Проще привести пример —


дир1:объект1
дир1:объект2
дир1:объект3
дир1:объект4
дир2:объект5
дир2:объект6
дир2:объект1
дир2:объект3
дир3:объект10
дир3:объект11
дир3:объект12
дир3:объект14

В рамках директории объекты уникальны. В аналогии с файловой системой — не могут быть два файла с одним и тем же именем.
Директории также уникальны.

Пример близкий к реальному:

\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\eeeee 
\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\ooooo(01):\bbbb\cccc\dddd\hhhhh
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\eeeee 
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\vvvvv(02):\bbbb\cccc\dddd\jjjjjj 
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\eeeee 
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\ddddd(03):\bbbb\cccc\dddd\wwwww
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\eeeee 
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\qqqqqq
\aaaa\eeee\yyyyy\lllll(04):\bbbb\cccc\dddd\ffffff


В скобках перед двоеточием это не часть строки дир-а, а некий ID для этого дира.

Требуется :
    1) быстро искать по запросам типа:
      1) найти ID для дир=\aaaa\eeee\yyyyy\ooooo,
      2) найти объект \aaaa\eeee\yyyyy\vvvvv если ID=10
    2) Хранить это в неком блобе (двоичный файл), который при загрузке можно уже превратить в некое дерево или что угодно.