Эффективно хранимый словарь. Существует ли эта структура данных и как она называется?

Мне нужна структура данных, в которой хранится множество фрагментов низкоэнтропийных данных, которые часто похожи друг на друга. Я хочу эффективно хранить их (как-то сжимать) и извлекать их по индексу или сопоставлению.Быстрое извлечение более важно, чем сжатие, но нельзя хранить их в несжатом виде.

Лучший пример, который я могу придумать, - это хранение миллиарда письменных предложений, взятых из объемов текстов (в сжатом виде на диске).

dict:
1: 'The quick brown fox jumps over the lazy dog.'
2: 'The quick green frog jumps over the lazy fox.'
3: 'The quick brown fox jumps over the lazy frog.'

Если два предложения одинаковы, они должны иметь одинаковый индекс.

Я хочу получить их либо по индексу, либо по подстановочному знаку (регулярное выражение тоже хорошо, но не обязательно). то есть:

dict.get(1) => 'The quick brown fox jumps over the lazy dog.'
dict.match('The quick brown *') => [1, 3]

Я мог бы сжать каждое предложение, но это не учитывает тот факт, что многие записи похожи.

Я мог отсортировать их и сохранить различия. но добавлять и удалять элементы очень сложно.

Он должен поддерживать юникод.

Я уверен, что для этого существует какая-то древовидная структура.

Бонусные баллы, если у него есть оболочка python.

Этот https://hkn.eecs.berkeley.edu/~dyoo/python/suffix_trees/ выглядит очень близко, но не видел действий с 2002 / py2.2, и я не мог его понять бежать. Если есть более новые / лучшие альтернативы, я бы хотел услышать о них.

Я включаю тег биоинформатики, потому что понимаю, что там используются суффикс_терева и аналогичные структуры данных.

11
задан Paul 18 February 2012 в 00:14
поделиться