powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Индекс , он же - хранилище (строк)
13 сообщений из 13, страница 1 из 1
Индекс , он же - хранилище (строк)
    #32711567
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Каждая строка может быть представлена как конкатенация двух своих половин ...

"Половины" - можно понимать не как ТОЧНОЕ деление пополам, но как "приблизительное" деление, - с тем, чтобы - по возможности - не "разбивать" ни слова (если строка состоит из нескольких словоформ), ни "предложения" (если строка состоит из нескольких предложений) ...

Каждая из двух половин - тоже является строкой, и даже - как правило - более-менее осмысленной.

2. В процессе последовательного деления любой конкретной строки мы рано или поздно придем к "алфавиту" - к "терминальным символам", понимаемым (в зависимости от задачи) или как буквы, или как словоформы, или как комбинации букв - части слова ...

3. Пусть мы обрабатываем некоторый "большой контент", понимаемый как набор "текстов" (=строк) ...

При помощи некоторого алгоритма хеширования мы составляем "индекс", понимаемый как список уникальных (!) хеш-ключей всех текстов, входящих в данный контент.

Этот индекс представляет собой таблицу из трех числовых полей ( key , key1 , key2 ), каждая строка которой описывает одну уникальную текстовую строку.

Значения полей:
key - хеш-ключ описываемой текстовой строки (= уникальный идентификатор строки таблицы!),
key1 - хеш-ключ ее "левой половины",
key2 - хеш-ключ ее "правой половины".

При этом - наряду с "исходной" ("длинной") текстовой строкой - в данный индекс мы заносим (если они еще не занесены!) также обе ее "половины" ... так, чтобы значения key1 и key2 всегда указывали на РЕАЛЬНЫЕ строки таблицы ...

4. Понятно, что строки индекса, описывающие "терминальные символы" (см. п. 2), будут иметь ПУСТЫЕ значения полей key1 и key2 (поскольку терминальный символ не имеет "подстрок") ... или, например, - в соответствии со СПЕЦИАЛЬНЫМ СОГЛАШЕНИЕМ - одно из этих полей может иметь пустое значение, а другое - указывать "вовне индекса" на специальную таблицу используемых нами "терминальных символов".

5. Возвращаясь к subj-у, - понятно, почему там значится "хранилище": потому, что используя подобный индекс мы можем ЛЕГКО восстановить каждую исходную строку (текст!) по ее уникальному хеш-ключу.
_____________________________________

Очень хотелось бы услышать содержательные комментарии ... в частности, - делает ли кто-нибудь подобные индексы?
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32711691
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS
в частности, - делает ли кто-нибудь подобные индексы?
Подобные - подобным алгоритмом, или подобные - уникальные индексы для фиксированного набора строк?
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32711835
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подобные индексы - для "больших контентов".
Подобные индексы - то есть индексы строк, рекурсивно увязанных СО ВСЕМИ их "подстроками" вплоть до "словоформ"...

И дальше - как можно такие индексы ИСПОЛЬЗОВАТЬ? Акромя как - в качестве ХРАНИЛИЩА строк ...
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32711855
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле это какие-то странные индексы :)

На счёт эффективности такого хранилища, тоже есть сомнения.
На каждом шаге деления, кол-во текстов требующих уникальный ключ растёт как 2^n. Если тексты в "контенте" действительно большие, то кол-во строк проиндексированных "просто так" не плохо разрастётся, пока не начнут появляться одинаковые фрагменты текста.

Опять же, выбор терминальных символов не тривиальная задача.

Если хеш-функции описанной в п.3 нет и задавать последнюю путём перечисления, то процесс вычисления хеш-функции сильно усложнится.
Фактически придётся фиксировать правило разбияния строки "пополам" и каждую строчку разбивать до терминальных символов, а потом в обратном порядке восстанавливать хеш, пробегая для этого по списку всех пар (key1, key2), короче мало приятного.

А если такая хеш-функция есть, то почему бы её и не использовать в качестве ключа? Восстановление значения по сложному ключу будет порядка (ln(кол-во захешированных подстрок) т.е. пробежки по таблице связей), а пробежка по исходным строкам в хеш-таблице(ln(исходное число строк)).

Эффект сжатия достигаемый за счёт кодирования терминальными символами (если цель экономия памяти и т.п.) можно обеспечить и по другому. Например, при помощи статического алгоритма Хафмана. По крайней мере будет уверенность, что сжатие оптимально, в отличиии от выбора терминальных символов от балды.

Хранить тексты в виде древовидных структур (леса) тоже никто не запрещает.
Для текстов, где действительно много общих частей, получим экономию.
Однако при этом индексировать промежуточные узлы деревьев нет необходимости (что происходит в описанном алгоритме).

Такие индексы могли бы прокатить для поиска подстрок, если терминальные символы были бы примитивами (буквами, знаками припинания). Но про эффективность/не эффективность такого алгоритма говорить не стану :)

Кроче говоря, исходный алгоритм, это три задачи в одной, и чем он лучше решения трех задач по отдельности не ясно :)

---

Выше написанное, это поверхностный взгляд на вопрос. В полне возможно, что в чём-то я не прав :)


И дальше - как можно такие индексы ИСПОЛЬЗОВАТЬ? Акромя как - в качестве ХРАНИЛИЩА строк ...

Обычно сначала ставят задачу, а потом ищут её решение, а не на ходят какое-то решение и думают потом для какой же оно задачи.
Хотя всякое бывает :)
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32712248
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsНа каждом шаге деления, кол-во текстов требующих уникальный ключ растёт как 2^n. - на каждом шаге растёт в два раза, - Вы, наверное, это хотели сказать?

NotGonnaGetUsЕсли тексты в "контенте" действительно большие, то кол-во строк проиндексированных "просто так" не плохо разрастётся, пока не начнут появляться одинаковые фрагменты текста.- дык, мы же не хаос собирается индексировать, а ЧЕЛОВЕЧЕСКИЕ тексты ... есть ПРЕДПОЛОЖЕНИЕ, что "одинаковых фрагментов текста" там довольно много ...

NotGonnaGetUsЕсли хеш-функции описанной в п.3 нет ... А если такая хеш-функция есть, то почему бы её и не использовать в качестве ключа?- хеш-функция ЕСТЬ, именно она и используется в качестве ключа.

NotGonnaGetUsЭффект сжатия достигаемый за счёт кодирования терминальными символами ...- основной "эффект сжатия" я предполагаю достигаемый не за счёт терминальных символов, а за счёт наличия "одинаковых фрагментов текста".

NotGonnaGetUsХранить тексты в виде древовидных структур (леса) тоже никто не запрещает. Однако при этом индексировать промежуточные узлы деревьев нет необходимости (что происходит в описанном алгоритме).- не понял: а как их - тогда - идентифицмровать???

NotGonnaGetUsОбычно сначала ставят задачу, а потом ищут её решение, а не на ходят какое-то решение и думают потом для какой же оно задачи. Хотя всякое бывает :)- так то - обычно! ;-) Есть такое слово - интуиция ... Она мне подсказывает, - что-то в этом есть ... а чтобы разобраться, что именно, - для этого я на форумы и вылезаю.
Получишь несколько раз по голове и ... картина прорисовывается! ;-)

А если серьезно - насчет задачи ... без всякого сомнения, присутствует задача ... ммм ... социолингвистики: посмотреть - статистически - какие строки (не слова, а ... что-то намного более длинное) насколько часто встречаются в ... окрухающих нас контентах. Ну и - семантикая всякая ... сети семантические и прочее ...
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32712250
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSПри помощи некоторого алгоритма хеширования мы составляем "индекс", понимаемый как список уникальных (!) хеш-ключей всех текстов, входящих в данный контент.
...
Значения полей:
key - хеш-ключ описываемой текстовой строки (= уникальный идентификатор строки таблицы!),
...

5. Возвращаясь к subj-у, - понятно, почему там значится "хранилище": потому, что используя подобный индекс мы можем ЛЕГКО восстановить каждую исходную строку (текст!) по ее уникальному хеш-ключу.



Еще раз. Хеш-ключ (значение хэш-функции) по определению не может быть уникальным . Не может быть уникального идентификатора исходной строки, полученного путем вычисления хэш-функции. И нельзя по хэш-ключу восстановить исходный ключ. Иначе это не хэш-функция просто. Я думаю, ты не в том направлении роешь.
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32713720
S.G..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван FXS
5. Возвращаясь к subj-у, - понятно, почему там значится "хранилище": потому, что используя подобный индекс мы можем ЛЕГКО восстановить каждую исходную строку (текст!) по ее уникальному хеш-ключу.
это не так. нельзя восстановить строку по ключу.


возьми какую-нибудь библиотеку, реализующую zip, или rar, или другой архиватор. Многие такие библиотеки компрессируют строки.
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32714034
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги MasterZiv и S.G.!

С прискорбием сообщаю, что вы ничегошеньки не поняли. ;-)
________________________________

"Хеш-ключ (значение хэш-функции) по определению не может быть уникальным" - это банальность, которую уже не интересно обсуждать.

Я различаю хэш-функцию и ПРАКТИЧЕСКИЙ хэш-алгоритм (см. об этом Q: "многомерное хеширование" - Голова, ноги ... хвост!!! ).

Впрочем, буду черезвычайно признателен, если вы приведете пример двух ОСМЫСЛЕННЫХ фраз, у которых CRC32 совпадает (про MD5 я не вспоминаю, - это было бы слишком жестоко ;-) )
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32714086
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты когда-нибудь видел утконоса ? Нет ? Но это же не значит, что он не существует.

"Я больше не буду тебе помогать. Мне это ... неинтересно". (С) Евгений Шварц.
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32726610
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS NotGonnaGetUsНа каждом шаге деления, кол-во текстов требующих уникальный ключ растёт как 2^n. - на каждом шаге растёт в два раза, - Вы, наверное, это хотели сказать?

Именно это мы и сказали.


NotGonnaGetUsЕсли тексты в "контенте" действительно большие, то кол-во строк проиндексированных "просто так" не плохо разрастётся, пока не начнут появляться одинаковые фрагменты текста.- дык, мы же не хаос собирается индексировать, а ЧЕЛОВЕЧЕСКИЕ тексты ... есть ПРЕДПОЛОЖЕНИЕ, что "одинаковых фрагментов текста" там довольно много ...

Да хоть набор букв.
В текстах часто могут повторяются "слова", а не "наборы слов" - т.е. группы предложений, предложений, части приложений.


NotGonnaGetUsЕсли хеш-функции описанной в п.3 нет ... А если такая хеш-функция есть, то почему бы её и не использовать в качестве ключа?- хеш-функция ЕСТЬ, именно она и используется в качестве ключа.

У нас разногласие в терминах.
Хеш-функция вычисляется для любой строки и даёт в общем случаее не уникальное значение - т.е. восстановить строку по занчению хеш-функции нельзя.
Ключ - уникальный идентификатор. Он взаимнооднозначно связывается с набором каких-то объектов.

NotGonnaGetUsЭффект сжатия достигаемый за счёт кодирования терминальными символами ...- основной "эффект сжатия" я предполагаю достигаемый не за счёт терминальных символов, а за счёт наличия "одинаковых фрагментов текста".

Я же не говорил, что это основной эффект - так? Про деревья отдельный разговор.


NotGonnaGetUsХранить тексты в виде древовидных структур (леса) тоже никто не запрещает. Однако при этом индексировать промежуточные узлы деревьев нет необходимости (что происходит в описанном алгоритме).- не понял: а как их - тогда - идентифицмровать???

?
Лес служит для хранения строк.
Вершина дерева идентифицирует строку.
Строка идетифицируется ключём.
Ключ -> вершина -> строка.


А если серьезно - насчет задачи ... без всякого сомнения, присутствует задача ... ммм ... социолингвистики: посмотреть - статистически - какие строки (не слова, а ... что-то намного более длинное) насколько часто встречаются в ... окрухающих нас контентах. Ну и - семантикая всякая ... сети семантические и прочее ...
Забавно. Я на этот алгоритм смотрел с других позиций :)
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32726816
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs NotGonnaGetUsЕсли тексты в "контенте" действительно большие, то кол-во строк проиндексированных "просто так" не плохо разрастётся, пока не начнут появляться одинаковые фрагменты текста.- дык, мы же не хаос собирается индексировать, а ЧЕЛОВЕЧЕСКИЕ тексты ... есть ПРЕДПОЛОЖЕНИЕ, что "одинаковых фрагментов текста" там довольно много ...

Да хоть набор букв.
В текстах часто могут повторяются "слова", а не "наборы слов" - т.е. группы предложений, предложений, части приложений.
- не очень понял, с чем и о чем Вы - в этом месте полемизируете ...
Но я-то как раз считаю, что НЕ ТОЛЬКО слова, но и "наборы слов" в ЧЕЛОВЕЧЕСКИХ ... ммм ... потоках символов часто повторяются:
намного чаще, чем они повторялись бы в "хаотических" потоках.


NotGonnaGetUsхеш-функция ЕСТЬ, именно она и используется в качестве ключа.У нас разногласие в терминах.
Хеш-функция вычисляется для любой строки и даёт в общем случаее не уникальное значение - т.е. восстановить строку по занчению хеш-функции нельзя.
Ключ - уникальный идентификатор. Он взаимнооднозначно связывается с набором каких-то объектов.
- разногласие в терминах - наверное ... Я обсуждаю уникальный идентификатор, постороенный НА ОСНОВЕ хеш-функции.
Такой идентификатор полезен тем, что он "почти вычислимый":
после вычисления хеш-функции - нужно только произвести некоторую ОГРАНИЧЕСННУЮ работу по так называемому "разрешению коллизий".

Да, "хеш-функция ... в общем случае не уникальное", но насколько эта "в общем случае неуникальность" практически значима?
Например, MD5 ... дайджест длиной 128 бит ... какова для него ЗНАЧИМОСТЬ коллизий?

NotGonnaGetUsЛес служит для хранения строк.
Вершина дерева идентифицирует строку.
Строка идетифицируется ключём.
Ключ -> вершина -> строка.

- как ССЫЛАТЬСЯ на ветки, если им не присвоены ИДЕНТИФИКАТОРЫ? Вот о чем было мое недоумение! Мы же должны записать ТРОЙКУ ( key,key1,key2 )!
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32728119
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXS- не очень понял, с чем и о чем Вы - в этом месте полемизируете ...
Но я-то как раз считаю, что НЕ ТОЛЬКО слова, но и "наборы слов" в ЧЕЛОВЕЧЕСКИХ ... ммм ... потоках символов часто повторяются:
намного чаще, чем они повторялись бы в "хаотических" потоках.

Я не обсуждаю человеческие ммм потоки. Речь об вашем алгоритме :)
Он выделяет не одинаковые "наборы слов", а "половины текстов". Тексту придётся раздробиться до уровня слов, пока не начнутся массовые повторения. Это моя "интуиция" если вам так угодно :)


- разногласие в терминах - наверное ...
...
Например, MD5 ... дайджест длиной 128 бит ... какова для него ЗНАЧИМОСТЬ коллизий?

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


- как ССЫЛАТЬСЯ на ветки, если им не присвоены ИДЕНТИФИКАТОРЫ? Вот о чем было мое недоумение! Мы же должны записать ТРОЙКУ ( key,key1,key2 )!
По вашему утверждению key0 уникален. Какие проблемы в том, что бы пометить им вершину?
...
Рейтинг: 0 / 0
Индекс , он же - хранилище (строк)
    #32728166
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsЯ просто говорю, что если вы научились считать уникальный хеш, то он сам по себе уже ключ(или идентификатор), и нет смысла городить из него тройку.
- "тройка" нужна для того, чтобы ВОССТАНАВЛИВАТЬ (по идентификатору) исходную строку ... отсюда - в названии ветки - "он же - хранилище".
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Индекс , он же - хранилище (строк)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]