Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Алгоритм поиска общих частей строк

Автор myst, апреля 14, 2009, 19:59

0 Пользователи и 1 гость просматривают эту тему.

Алексей Гринь

肏! Τίς πέπορδε;

Ömer

Вырезаете из каждого слова всевозможные куски длинной не меньше, чем вам нужно, и добавляете их в хеш-таблицу (Hashtable/Dictionary в C#, hash_map в C++), где ключ - это сама подстрока, а значение - её встречаемость.

И потом пробегаетесь по хеш-таблице и отображаете её содержимое.
ya herro, ya merro

Алексей Гринь

Цитата: "svarog" от
Вырезаете из каждого слова всевозможные куски длинной не меньше, чем вам нужно
Скока ж памяти и времени всё это вырезать
нужны inplace сравнивания, и уже когда нужно - вырезания в хеш, что я щас  иделаю
肏! Τίς πέπορδε;

myst

Цитата: "svarog" от
Вырезаете из каждого слова всевозможные куски длинной не меньше, чем вам нужно, и добавляете их в хеш-таблицу (Hashtable/Dictionary в C#, hash_multimap в C++), где ключ - это сама подстрока, а значение - её встречаемость.
Так и сделаю. Спасибо.

Алексей Гринь

肏! Τίς πέπορδε;


myst

Цитата: "Алексей Гринь" от
На чём собираешьтеся?
На чём обычно — на clisp'е. Если будет сильно тормозит, на жабе перепишу. :)

собираешьтеся — это политкорректный вариант? ;D

Алексей Гринь

Цитата: "Алексей Гринь" от
Скока ж памяти и времени всё это вырезать
нужны inplace сравнивания, и уже когда нужно - вырезания в хеш, что я щас  иделаю
хотя нет, в сишарпе не прокатит, обращение к чару из строки слишком дорогое в НЕТе удовольствие :(
Цитата: "myst" от
собираешьтеся — это политкорректный вариант? ;D
угу

Цитата: "myst" от
На чём обычно — на clisp'е. Если будет сильно тормозит, на жабе перепишу. :)
короче, давайешьте (:)) конкурс - я пишу свою версию, постишь базу, и засекаем у кого по времени быстрее
肏! Τίς πέπορδε;

myst

Цитата: "Алексей Гринь" от
короче, давайешьтеся (:)) конкурс - я пишу свою версию, постишь базу, и засекаем у кого по времени быстрее
Сравнение эффективности хэшей в C#, CLISP и Java? ;)

Алексей Гринь

Цитата: "myst" от
Сравнение эффективности хэшей в C#, CLISP и Java?
ну и алгоритмов - я не буду заниматься вырезанием в память всех возможных комбинаций, только тех, что нужно
肏! Τίς πέπορδε;

Алексей Гринь

Базу прошу сразу залить куда-нибудь, я возможно скоро готов )
肏! Τίς πέπορδε;

Алексей Гринь

Не, я пас, всё таки обращение к строкам в НЕТе очень медленное :(
Трогать сипопу неохота.
肏! Τίς πέπορδε;

myst

Цитата: "Алексей Гринь" от
ну и алгоритмов - я не буду заниматься вырезанием в память всех возможных комбинаций, только тех, что нужно
А каких нужно? :)

Алексей Гринь

Цитата: "myst" от
А каких нужно?
сравниваются строки без выделений памяти и если находится общее, вырезается и суётся в хештаблицу
это для тех, кто памятью бережёт
правда, реализация получилась оч медленная -- а оптимизиорвать в лом

посмотрим как выйдет у вас)
肏! Τίς πέπορδε;

myst


myst


Ömer

Цитата: Алексей Гринь от апреля 15, 2009, 00:04
правда, реализация получилась оч медленная -- а оптимизиорвать в лом

Это вы перемудрили :) Я только что реализовал тот простейший вариант что описывал, 10 строчек кода и работает мгновенно.

Вот верхняя часть таблицы результатов для подстрок длинной десять:
ологически 34
аспростран 31
распростра 31
интересова 30
значительн 29
станавлива 29
ительность 28
ологическо 25
следовател 25
определенн 24
сопровожда 24
соответств 23
государств 22
представля 22
естественн 21
обыкновенн 21
иологическ 20
офессионал 20
профессион 20
рофессиона 20


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

myst, а для чего это, если не секрет? :)
ya herro, ya merro

myst

На CLISP'е ≈50 секунд (в месте с выводом) и <30 Мбайт памяти. Я думал будет гораздо хуже. :)

myst

Цитата: "svarog" от
Неинтересная статистика, потому что в базе идут вместе со словом и его словоформы -- они, группируясь, и дают высокую встречаемость.
Самая что ни на есть интересная. :) Правда, мне ещё надо частоту словоформы учесть, но это ерунда.

Цитата: "svarog" от
myst, а для чего это, если не секрет? :)
Я занимаюсь машинописью по одной методичке. Возникли у меня сомнения в оптимальности упражнений на «слоги». Всё-таки написана она была четверть века назад.

Ömer

Цитата: myst от Я занимаюсь машинописью по одной методичке. Возникли у меня сомнения в оптимальности упражнений на «слоги». Всё-таки написана она была четверть века назад.
А , тогда, если я правильно понимаю, можно просто идти по тексту, вырезая из каждого слова подстрочки и складывая их в хеш-таблицу.

Цитата: svarogдля подстрок длинной десять
Ух, гадкое слово.  :-[
ya herro, ya merro

myst

Цитата: "svarog" от
А , тогда, если я правильно понимаю, можно просто идти по тексту, вырезая из каждого слова подстрочки и складывая их в хеш-таблицу.
Не, задача — отобрать самые частотные кусочки слов и сделать из них упражения. В общем-то, она уже почти решена. :)

Ömer

Ну, так и есть - если кусочки выдирать сразу из текста, а не из базы слов, то частотность их в тексте учитывается автоматически.
ya herro, ya merro

myst

Цитата: "svarog" от
Ну, так и есть - если кусочки выдирать сразу из текста, а не из базы слов, то частотность их в тексте учитывается автоматически.
Эта база слов — частотный словарь. В нём данные о частотности слов уже есть.

Ömer

ya herro, ya merro

myst

Цитата: svarog от апреля 15, 2009, 18:16
Понятно. И как, в методичке правильные упражнения?  :)
У меня тут грабли с таблицей стилей форума вылезли... :wall: Руки до полученной статистики ещё не дошли. :)

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр