alhames.ru
Чет тихо.. Вот, чтоли, для разнообразия:
Итак, задача такая - реализовать на PHP бинарное дерево.
Как я понимаю, самый удачный способ - использовать ООП.
Так как в ООП я чайник, так что сейчас буду разбираться.
Хотелось бы увидеть ваши варианты реализации
Итак, задача такая - реализовать на PHP бинарное дерево.
Как я понимаю, самый удачный способ - использовать ООП.
Так как в ООП я чайник, так что сейчас буду разбираться.
Хотелось бы увидеть ваши варианты реализации

P.S. я без претензий, я просто не люблю ООП =)
class CVal
{
var $value, $left, $right;
function CVal($value)
{
$this->value = $value;
$this->left = null;
$this->right = null;
}
// worker funcs
function find($value)
{
if ($this->value == $value)
return TRUE;
elseif ($value < $this->value)
return $this->left ? $this->left->find($value) : FALSE;
else
return $this->right ? $this->right->find($value) : FALSE;
}
function add($value)
{
if ($value < $this->value)
{
if ($this->left)
$this->left->add($value);
else
$this->left = new CVal($value);
}
else
{
if ($this->right)
$this->right->add($value);
else
$this->right = new CVal($value);
}
}
}
$binary = new CVal(50);
$binary->add(60);
$binary->add(70);
$binary->add(10);
var_dump ($binary);
?>
function bin_create($value)
{
return array('value' => $value);
}
function bin_add(&$binary, $value)
{
if ($value < $binary['value'])
$frame = 'left';
else
$frame = 'right';
if (isset($binary[$frame]))
bin_add($binary[$frame], $value);
else
$binary[$frame] = bin_create($value);
}
function bin_find(&$binary, $value)
{
if ($binary['value'] == $value)
return TRUE;
elseif ($value < $binary['value'])
return bin_find($binary['left'], $value);
else
return bin_find($binary['right'], $value);
}
// etc
$binary = bin_create(50);
bin_add($binary, 60);
bin_add($binary, 70);
bin_add($binary, 10);
var_dump ($binary);
?>
это, ест-но, не полная реализация, просто для примера. )
ну, скажем AVL или Red-Black Binary tree. Короче сбалансированое дерево.
Вот, разобрал и прокомментировал приведенный тобой класс.
довольно длинный код...
Впрочем, она мне не столь важна.. Теперь буду делать это:
"Вершины дерева вещественные числа. Описать функцию, которая:
a) вычисляет среднее арифметическое всех вершин дерева;
b) добавляет в дерево вершину со значением, вычисленным в предыдущей процедуре (функции)."
по сути мой второй пример тоже являет собой ООП, только на более низком уровне)
А как быть со скоростью?
а ты замерял, что быстрее работает и насколько?
Теперь буду делать это:
пффф)
Вот, разобрал и прокомментировал приведенный тобой класс
ну, прокомментировать - прокомментировал, ты-то понял, почему так, а не иначе?))
а ты замерял, что быстрее работает и насколько?
Неа, руки не дошли еще..
пффф)
Вот-вот.. У мну творческий кризис из-за болезни =(
ну, прокомментировать - прокомментировал, ты-то понял, почему так, а не иначе?))
Всмысле логику класса? Вообщем-то да =)
Слышали об инкапсуляции? неплохо было бы прописать для всех переменных и функций в классе степень защищенности от несанкционированного доступа...