| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Ruby: Общие вопросы > Поиск элелментов, максимально повторяющихся |
| Автор: Krieger 10.12.2009, 07:23 |
| Вопрос наверно простой, но я голову уже совсем сломал) Есть книга, нужно найти в ней слова, которые чаще всего встречаются в тексте. Проверка равенства каждого слова с каждым словом в тексте и присвоение ему значения занимает слишком много времени. Знаю, что можно сделать через hash, но не понимаю как. Пишу в ruby. |
| Автор: Akina 10.12.2009, 08:33 |
| Сортировка подсчётом? Нет. Какой бы ни был хороши хэш - всегда возможны коллизии. |
| Автор: 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, если нет - добавляешь (с нулевым счетчиком), затем инкрементируешь счетчик. |