Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];

Вниз

сжатие строк   Найти похожие ветки 

 
картман ©   (2015-10-29 23:30) [0]

Всем привет!
Есть много строк:

мана
мама
машина

нужно сделать что-то вроде:
Array[] a = ("ма","на","ши");
тогда строки будут представлены в виде:
мана = [0,1];
мама = [0,0];
машина = [0,2,1];

чтобы найденные "кусочки" способствовали максимальному(или близко к нему) сжатию?


 
Pavia ©   (2015-10-29 23:37) [1]

Суффиксное дерево.


 
Sha ©   (2015-10-29 23:48) [2]

LZW


 
картман ©   (2015-10-29 23:48) [3]


> Pavia ©   (29.10.15 23:37) [1]
>
> Суффиксное дерево.

искать умучаюсь


 
Sha ©   (2015-10-29 23:58) [4]

так тебе сжать или искать?


 
картман ©   (2015-10-30 00:12) [5]

в смысле, искать оптимальные кусочки для сжатия. А потом да, потом искать.
 Не понял LZW((

  1. Инициализация словаря всеми возможными односимвольными фразами. Инициализация входной фразы W первым символом сообщения.
   2.Найти в словаре строку W наибольшей длины, которая совпадает с последними принятыми символами.
   3.Считать очередной символ K из кодируемого сообщения.
   4.Если КОНЕЦ_СООБЩЕНИЯ, то выдать код для W, иначе.
   5.Если фраза WK уже есть в словаре, присвоить входной фразе W значение WK и перейти к Шагу 3, иначе выдать код W, добавить WK в словарь, присвоить входной фразе W значение K и перейти к Шагу 3.
   6.Конец.


 
картман ©   (2015-10-30 00:20) [6]

лучше так описать задачу:
нужно сделать поиск по словарю, каждое слово состоит из приставки, корня, суфикса и окончания. Любая из частей может быть опущена. Ну и в моем случае все эти части слов могут быть одним и тем же, т.е. храниться в одном списке. Как получить эти приставки-окончания для минимизации словаря в памяти?


 
Sha ©   (2015-10-30 01:01) [7]

В [5] описано нечто, похожее на алгоритм сжатия данных LZW.
Для [6] проще всего хешировать.
Для хранения в памяти слов естественного языка со всеми словоформами довольно эффективно и проще всего реализуется дельта-кодирование расстояний между словами. Например, древовидная 3-х уровневая структура блоков, в которых хранится начальное слово и расстояния до каждого следующего слова в блоке. Как правило, на слово достаточно 1-2 байта.


 
картман ©   (2015-10-30 01:45) [8]


> Sha ©   (30.10.15 01:01) [7]
>
> В [5] описано нечто, похожее на алгоритм сжатия данных LZW.
>

да, разобрался по другому описанию.


> Для хранения в памяти слов естественного языка со всеми
> словоформами

имена собственные, много, со словоформами


> Например, древовидная 3-х уровневая структура блоков

эээ... можно подробнее?


 
Pavia ©   (2015-10-30 06:32) [9]


> нужно сделать поиск по словарю, каждое слово состоит из
> приставки, корня, суфикса и окончания. Любая из частей может
> быть опущена. Ну и в моем случае все эти части слов могут
> быть одним и тем же, т.е. храниться в одном списке. Как
> получить эти приставки-окончания для минимизации словаря
> в памяти?

Это трудная задача. Читай словарь Зализняка там описано.
Гораздо проще использовать псевдо суффиксы.

Таки не понял чем суффиксное дерево не устроило?


> Например, древовидная 3-х уровневая структура блоков, в
> которых хранится начальное слово и расстояния до каждого
> следующего слова в блоке. Как правило, на слово достаточно
> 1-2 байта.

хотелось бы подробнее.


 
Sha ©   (2015-10-30 09:41) [10]

> имена собственные, много, со словоформами

Это мало )

> хотелось бы подробнее

Идея в том, что в естественном языке с большим количеством словоформ они (формы) лежат достаточно плотно. Т.е. если ввести некую нумерацию форм, рассматривая буквы как цифры в N-ричной системе счисления, то для упорядоченных по алфавиту форм разница в весе между соседними формами обычно будет небольшой. Конечно, иногда будут скачки в районе длинных слов типа "машиностроительный", но их относительная доля невелика. Таким образом, вместо хранения слов можно хранить эти самые дельты - числа переменной длины. Все они собираются в блоки. Каждый блок имеет имя, совпадающее с первым словом в блоке. Если блоков слишком много, добавляем еще один уровень иерархии. Для оценки: примерно 400..500k памяти - и уже становится очень трудно найти слово, которого нет в словаре.


 
картман ©   (2015-10-30 10:29) [11]


> Таки не понял чем суффиксное дерево не устроило?

ну вот получил я суффиксы. Нашел наибольшие. А как узнать, что их использование даст наибольшую или близкую к ней экономию памяти? Берем "часть1", вырезаем ее из всех слов, - строим другое дерево, и еще, и еще?.. как-то коряво получается.


>  Sha ©   (30.10.15 09:41) [10]

ясно, спасибо.


 
brother ©   (2015-11-02 11:00) [12]

> А как узнать, что их использование даст наибольшую или близкую
> к ней экономию памяти

2х проходность. на первом проходе оценку весов, на втором непосредственное сжатие или как там нужно?)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
15-1440774489
Rouse_
2015-08-28 18:08
2016.07.24
Ха, Windows 10 в крайними обновлениями может повесить систему :)


15-1445780305
Кто б сомневался
2015-10-25 16:38
2016.07.24
Посоветуйте какие то интересные сайты, типа хабра


15-1443303004
Юрий
2015-09-27 00:30
2016.07.24
С днем рождения ! 27 сентября 2015 воскресенье


15-1442343788
DayGaykin
2015-09-15 22:03
2016.07.24
Копирование потока без хвоста.


15-1441852590
MonoLife
2015-09-10 05:36
2016.07.24
И почту Yahoo заблокировали





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский