Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск элелментов, максимально повторяющихся 
:(
    Опции темы
Krieger
Дата 10.12.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



 Вопрос наверно простой, но я голову уже совсем сломал) 
 Есть книга, нужно найти в ней слова, которые чаще всего встречаются в тексте. Проверка равенства каждого слова  с каждым словом в тексте и присвоение ему значения занимает слишком много времени.  Знаю, что можно сделать через hash, но не понимаю как. Пишу в ruby.
PM MAIL   Вверх
Akina
Дата 10.12.2009, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Сортировка подсчётом?
Цитата(Krieger @  10.12.2009,  08:23 Найти цитируемый пост)
Знаю, что можно сделать через hash,

Нет. Какой бы ни был хороши хэш - всегда возможны коллизии.

Это сообщение отредактировал(а) Akina - 10.12.2009, 08:34


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Earnest
Дата 10.12.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: нет
Всего: 183



Т.е. просто подсчитать, сколько раз встречается какое слово (за один проход по тексту) и взять максимальный счетчик. Подходящая структура данных - контейнер map или hash_map "строка -> счетчик". Только в этом контексте тебе может пригодиться хэш - чтобы строки побыстрее искать. Но можно и сортированный map использовать, не существенно.


--------------------
...
PM   Вверх
Krieger
Дата 10.12.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



 программа должна считывать текст и он выводит например 3 слова, которые чаще всего встречаются в тексте

  с каждым новым словом он будет либо записывать новый элемент в хеш массиве, либо если слово уже такое есть приписывать к значению слова +1. Вот только как это записать, что бы машина поняла, не знаю.. 
PM MAIL   Вверх
Akina
Дата 10.12.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Вопрос программной реализации следует обсуждать в разделе форума по конкретному языку программирования. А ещё лучше - иди сразу в "Центр помощи", всё равно твоей теме судьба оказаться именно там.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Krieger
Дата 10.12.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.6.2006

Репутация: нет
Всего: нет



 Я тут новичок и плохо ориентируюсь,  буду знать. Мне нужно подробное логическое объяснение алгоритма. С программной реализацией, думаю, что справлюсь. 

Это сообщение отредактировал(а) Krieger - 10.12.2009, 11:27
PM MAIL   Вверх
Earnest
Дата 11.12.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: нет
Всего: 183



Да нет тут никакого алгоритма. Одна сплошная реализация, а она зависит от языка.
Еще раз: нужна структура данных, которая эффективно отображает строку на счетчик. Чаще всего это называется Map. Читаешь текст пословно, для каждого слова ищешь его в Map, если нет - добавляешь (с нулевым счетчиком), затем инкрементируешь счетчик.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.