Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Поиск элелментов, максимально повторяющихся


Автор: Krieger 10.12.2009, 07:23
 Вопрос наверно простой, но я голову уже совсем сломал) 
 Есть книга, нужно найти в ней слова, которые чаще всего встречаются в тексте. Проверка равенства каждого слова  с каждым словом в тексте и присвоение ему значения занимает слишком много времени.  Знаю, что можно сделать через hash, но не понимаю как. Пишу в ruby.

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

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

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

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

  с каждым новым словом он будет либо записывать новый элемент в хеш массиве, либо если слово уже такое есть приписывать к значению слова +1. Вот только как это записать, что бы машина поняла, не знаю.. 

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)