воскресенье, 10 февраля 2013 г.

поиск значения в бинарном файле c++

PPPPPPPPPPPPPPPPPPPPPPPPthis.valueP=Pvalue;

PPPPPPPPPPPPPPPPPPPPPPPPthis.keyP=Pkey;

PPPPPPPPPPPPPPPPNode(T1Pkey,PT2Pvalue)P{

PPPPPPPPPPPPPPPPNode<T1,PT2>Pleft,Pright;

PPPPPPPPstaticPclassPNode<T1,PT2>P{

publicPclassPBSTree<T1PextendsPComparable<T1>,PT2>P{

PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPderivingP(Show)

dataPOrdPkeyP=>PBSTreePkeyPvalueP=PLeafP|PBranchPkeyPvalueP(BSTreePkeyPvalue)P(BSTreePkeyPvalue)

Данные в дереве хранятся в его вершинах. В программах вершины дерева обычно представляют структурой, хранящей данные и две ссылки на левого и правого сына. Отсутствующие вершины обозначают null или специальным конструктором Leaf:

Каждой вершине X можно сопоставить свое дерево, состоящее из вершины, ее сыновей, сыновей ее сыновей, и т.д. Такое дерево называют поддеревом с корнем X. Левым и правым поддеревьями X называют поддеревья с корнями соответственно в левом и правом сыновьях X. Заметим, что такие поддеревья могут оказаться пустыми, если у X нет соответствующего сына.

У этого дерева корнем будет вершина A. Видно, что у вершины D отсутствует левый сын, у вершины B правый, а у вершин G, H, F и I оба. Вершины без сыновей принято называть листьями.

Двоичное дерево состоит из вершин и связей между ними. Конкретнее, у дерева есть выделенная вершина-корень и у каждой вершины может быть левый и правый сыновья. На словах звучит несколько сложно, но если взглянуть на картинку все становится понятным:

В этой статье деревья будут рассмотрены на примере реализации ассоциативного массива. Ассоциативный массив обобщенный массив, в котором индексы (их обычно называют ключами) могут быть произвольными.

Бинарные деревья поиска обычно применяются для реализации множеств и ассоциативных массивов (например, set и map в с++ или TreeSet и TreeMap в java). Более сложные применения включают в себя ropes (про них я расскажу в одной из следующих статей), различные алгоритмы вычислительной геометрии, в основном в алгоритмах на основе «сканирующей прямой».

Начать я решил с бинарных деревьев поиска, так как это достаточно базовая, но в то же время интересная штука, у которой к тому же существует большое количество модификаций и вариаций, а так же применений на практике.

В своих статьях я буду приводить примеры кода сразу на двух языках: на Java и на Haskell. Благодаря этому можно будет сравнить императивный и функциональный стили программирования и увидить плюсы и минусы того и другого.

Этой статьей я начинаю цикл статей об известных и не очень структурах данных а так же их применении на практике.

Структуры данных: бинарные деревья. Часть 1

9 августа 2009 в 23:40

Структуры данных: бинарные деревья. Часть 1 / Хабрахабр

Комментариев нет:

Отправить комментарий