читая Страуструпа
От: potap  
Дата: 30.04.03 10:16
Оценка:
Здравствуйте,
читал тут Страуструпа. Он приводит пример структуры для хранения дерева. Никак не могу въехать, что хранится в её членах. Подскажите плиз.

struct Tnode{
 string word;
 int count;
 Tnode * left;
 Tnode * right;
}
Re: читая Страуструпа
От: Кодт Россия  
Дата: 30.04.03 10:20
Оценка:
Здравствуйте, potap, Вы писали:

P>Здравствуйте,

P>читал тут Страуструпа. Он приводит пример структуры для хранения дерева. Никак не могу въехать, что хранится в её членах. Подскажите плиз.

P>
P>struct Tnode{
P> string word; // собственно хранимая величина. здесь: строка
P> int count; // возможно - количество узлов в этой ветви
P> Tnode * left; // левый дочерний узел
P> Tnode * right; // правый дочерний узел
P>}
P>
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[2]: читая Страуструпа
От: potap  
Дата: 30.04.03 10:28
Оценка:
Здравствуйте, Кодт, Вы писали:

P>
P>struct Tnode{
P> string word; // собственно хранимая величина. здесь: строка
ну это да, конечно
P> int count; // возможно - количество узлов в этой ветви
количество дочек ? или +внучек,правнучек и т.д.
P> Tnode * left; // левый дочерний узел
P> Tnode * right; // правый дочерний узел
т.е. дерево бинарное? Если да, то зачем count - число детей. Если нет - то как получить среднюю дочку?

Может, это вообще опечатка какая-нибудь? Это вообще-то в упражениях находится. Мне было бы понятно если дерево хранит словарь. о - отец для : он, ор, оса. он - отец для : они, оно, онуфрий. Но тогда бинарным деревом не обойтись ...  :???: 

P>}
P>
Re: читая Страуструпа
От: Bell Россия  
Дата: 30.04.03 10:29
Оценка:
Здравствуйте, potap, Вы писали:

P>Здравствуйте,

P>читал тут Страуструпа. Он приводит пример структуры для хранения дерева. Никак не могу въехать, что хранится в её членах. Подскажите плиз.

P>
P>struct Tnode{
P> string word;
P> int count;
P> Tnode * left;
P> Tnode * right;
P>}
P>


Книги под рукой нет, так что не совсем ясно назначение поля count, а с остальными все более-менее понятно:
word — скорее всего хранимая величина
left — указатель на вершину левого поддерева
right — указатель на вершину правого поддерева
count — возможно общее число потомков
Любите книгу — источник знаний (с) М.Горький
Re[3]: читая Страуструпа
От: Кодт Россия  
Дата: 30.04.03 10:48
Оценка:
Здравствуйте, potap, Вы писали:

P>Здравствуйте, Кодт, Вы писали:


P>>
P>>struct Tnode{
P>> string word; // собственно хранимая величина. здесь: строка
P>//ну это да, конечно
P>> int count; // возможно - количество узлов в этой ветви
P>//количество дочек ? или +внучек,правнучек и т.д.
P>> Tnode * left; // левый дочерний узел
P>> Tnode * right; // правый дочерний узел
P>//т.е. дерево бинарное? Если да, то зачем count - число детей.
P>// Если нет - то как получить среднюю дочку?
P>>}
P>>

count — это количество дочек+внучек+...
Потому что просто количество дочек считается как (left!=0) + (right!=0)

Нужно, к примеру, для балансирования дерева.

P>Может, это вообще опечатка какая-нибудь? Это вообще-то в упражениях находится.


Задача подсчета количества узлов в ветви — вполне "упражнятельная".

P>Мне было бы понятно если дерево хранит словарь. о — отец для : он, ор, оса. он — отец для : они, оно, онуфрий. Но тогда бинарным деревом не обойтись ...


Ну ты сам предложил тернарное дерево. А почему нельзя бинарное?

Бинарное Б-дерево.
о +
  +-> он +
  |      +-> они
  |      +-> оно
  |
  +-> онуфрий +
              +-> ор
              +-> оса


Дерево сравнений:
           +-> о
    +-> он +
    |      +-> они
оно +
    |      +-> онуфрий
    +-> ор +
           +-> оса
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re[4]: читая Страуструпа
От: potap  
Дата: 30.04.03 11:08
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Потому что просто количество дочек считается как (left!=0) + (right!=0)


К>Нужно, к примеру, для балансирования дерева.


это как ? что значит "балансирование дерева" ?

P>Мне было бы понятно если дерево хранит словарь. о — отец для : он, ор, оса. он — отец для : они, оно, онуфрий. Но тогда бинарным деревом не обойтись ...


К>Ну ты сам предложил тернарное дерево.

Я чисто для примера предложил. Случайно оказалось, что дочек у всех по три. Пусть будет ещё "она" и у "он" будет уже 4 дочки.

А почему нельзя бинарное?

К>Бинарное Б-дерево.

Да нет. "онуфрий" дочка для "он", а не "о". "он" лучше подходит на роль отца.
Я имел ввиду такое дерево :

о +
  +-> он +
  |      +-> они
  |      +-> оно
  |      +-> онуфрий
  |      +-> она
  |
  +-> ор +
  +-> оса+
Re[5]: читая Страуструпа
От: Кодт Россия  
Дата: 30.04.03 11:33
Оценка:
Здравствуйте, potap, Вы писали:

К>>Нужно, к примеру, для балансирования дерева.


P>это как ? что значит "балансирование дерева" ?


Балансированное дерево — такое, что в каждой дочерней ветке поровну (почти поровну) узлов.
Балансирование — перестройка дерева так, чтобы оно стало балансированным.

P>>Мне было бы понятно если дерево хранит словарь. о — отец для : он, ор, оса. он — отец для : они, оно, онуфрий. Но тогда бинарным деревом не обойтись ...


К>>Ну ты сам предложил тернарное дерево.

P>Я чисто для примера предложил. Случайно оказалось, что дочек у всех по три. Пусть будет ещё "она" и у "он" будет уже 4 дочки.

К>>А почему нельзя бинарное?


К>>Бинарное Б-дерево.

P>Да нет. "онуфрий" дочка для "он", а не "о". "он" лучше подходит на роль отца.
P>Я имел ввиду такое дерево :
P>
P>о +
P>  +-> он +
P>  |      +-> они
P>  |      +-> оно
P>  |      +-> онуфрий
P>  |      +-> она
P>  |
P>  +-> ор +
P>  +-> оса+
P>


Это еще одна разновидность: дерево с неограниченным (или равным алфавиту) числом дочерних узлов.

Словарю в принципе по барабану, в какой структуре храниться.
Можно в твоей (каждый уровень — другая буква),
можно в Б-дереве ( узел < дочка1 < правнучка1 < дочка2 ... < правнучкаN < следующий )
можно в дереве сравнений ( дочка1 < правнучка12...2 < узел < правнучка21...1 < дочка2 )

При этом слова, начинающиеся, скажем, на "он" с легкостью находятся во всех структурах.
Быстрее всего — в алфавитном дереве, затем — в Б-дереве, затем — в дереве сравнений.
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
Re: читая Страуструпа
От: pilat  
Дата: 30.04.03 14:01
Оценка:
Здравствуйте, potap, Вы писали:

P>Здравствуйте,

P>читал тут Страуструпа. Он приводит пример структуры для хранения дерева. Никак не могу въехать, что хранится в её членах. Подскажите плиз.

Два поля данных, связанных с узлом дерева и две ссылки: на левого и правого потомков
Re[2]: читая Страуструпа
От: Nastasya  
Дата: 05.05.03 13:48
Оценка: 3 (1) +1
Здравствуйте, Bell, Вы писали:

P>
P>struct Tnode{
P> string word;
P> int count;
P> Tnode * left;
P> Tnode * right;
P>}
P>


B>count — возможно общее число потомков


Могу предположить, что описанная структура используется в задаче, где нужно вывести количество повторений для каждого слова в некотором тексте, тогда
word — слово,
count — количество повторений word в исходном тексте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.