| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Помогите, древовидная сортировка... |
| Автор: mpjoke 23.12.2006, 20:06 | ||
| Помогите, надо заставить программу выводить в файл все слова, упорядоченные по частоте встречаемости. При этом нужно использовать древовидную сортировку Я написал 1 половину программы - сортирует в алфавитном порядке, а заставить ее построить 2 дерево, на основе 1го не получается... Вот текст программы, буду крайне признателен, если подскажите как это сделать или напишете этот кусок. Заранее спасибо.
|
| Автор: Pete 23.12.2006, 23:01 |
| Дерево должно быть одно. Строй дерево (двоичное, раземеется) по мере прочтения каждого слова. Изначально дерево пусть. Прочел слово --- добавил узел, след. слово --- след. узел и т.д. При добавлении надо будет сравнивать элементы (a, b --- слова): (a < b) <=> strcmp(a, b) < 0 (a = b) <=> strcmp(a, b) = 0 (a > b) <=> strcmp(a, b) > 0. Потом, пока дерево непусто, удаляешь очередное слово и пишешь его в файл. |
| Автор: mpjoke 24.12.2006, 11:40 |
| Я так и делал при сортировке по алфавиту, а теперь надо отсортировать по частоте встречаемости... А мне как то не взять инфу из отсортированного по алфавиту дерева... |
| Автор: Pete 24.12.2006, 15:54 |
| Зачем сортировать по алфавиту? Так ты сразу построишь двоичное дерево (алгоритм добавления спиши откуда-нибудь). А двоичное дерево обладает интересным свойством: для любого узла x дерева все элементы левого (правого) поддерева не больше (не меньше) x. Таким образом минимальный элемент --- самый левый лист. В соответствии с этим, удаляем минимум и печатаем его; удаляем след. мин и печатаем его; ... удаляем послед элемент и печатаем его. |
| Автор: Kuvaldis 24.12.2006, 16:21 | ||
| Идея достаточно проста: нужно обойти построенное тобой дерево любым из известных способов - симметричным, preorder, postorder. Т.е. так, чтобы ты заходил в каждый узел ровно один раз Исходное дерево отсортированно в лексиграфическом порядке. Т.е.
Теперь строишь новое дерево по такому же принципу, только теперь сравнение делаешь не по strcmp, а по уже имеющейся инфе о количестве встречаемости Т.е. придется строить НОВОЕ дерево упорядочение на месте старого - это ОЧЕНЬ неприятное и долгое занятие. Его лучше не рассматривать. |