Составители:
Рубрика:
с набором аксиом:
− аксиомы для MakeRoot (∀ u: α):
Root ( MakeRoot ( u ) ) = u;
Null ( Left ( MakeRoot ( u ) ) ) = True;
Null ( Right ( MakeRoot ( u ) ) ) = True;
− аксиомы для SetLeft (∀u: α; ∀ b:NonNullBT: Null ( Left ( b ) ) ):
Left ( SetLeft ( u , b ) ) = MakeRoot ( u );
Root ( SetLeft ( u , b ) ) = Root ( b );
Right ( SetLeft ( u , b ) ) = Right ( b );
− аксиомы для SetRight (∀u: α; ∀b:NonNullBT: Null ( Right ( b ) ) ):
Right ( SetRight ( u , b ) ) = MakeRoot ( u );
Root ( SetRight ( u , b ) ) = Root ( b );
Left ( SetRight ( u , b ) ) = Left ( b ).
На уровне функциональной спецификации все эти функции могут быть
выражены через функцию ConsBT. При этом приводимые далее соотношения
имеют место для переменных u, b1, b2 таких, что ∀u: α;
∀b2:NonNullBT: Null ( Right ( b2 ) ); ∀b1: NonNullBT: Null ( Left ( b1 ) ):
MakeRoot(u) = ConsBT( u,
Λ, Λ);
SetLeft ( u , b1) = ConsBT ( Root ( b1), MakeRoot ( u ), Right ( b1) );
SetRight ( u , b2 ) = ConsBT ( Root ( b2 ), Left ( b2 ), MakeRoot ( u ) ).
Абстрактные функции SetLeft и SetRight удобнее реализовать в виде проце-
дур, например:
procedure SetLeft ( a: Elem; b: BinT);
{Pred: Not Null ( b ) & Null ( Left ( b ) ) }
begin
if Null ( b ) then Otkaz ( 5 )
e
lse
if Not Null ( Left ( b ) ) then Otkaz ( 6 )
else b^.LSub := MakeRoot ( a )
end {SetLeft}
Рассмотрим
ссылочную реализации ограниченного бинарного дерева на
базе вектора
:
type Adr = 0 .. MaxAdr; {диапазон “адресов”в векторе }
BinT = Adr; {представление бинарного дерева }
Node =
record { узел : }
Info : Elem; { = содержимое }
LSub : BinT; { = левое поддерево }
RSub : BinT { = правое поддерево }
end { Node };
Mem =
array [Adr] of Node { вектор для хранения дерева }
61
с набором аксиом:
− аксиомы для MakeRoot (∀ u: α):
Root ( MakeRoot ( u ) ) = u;
Null ( Left ( MakeRoot ( u ) ) ) = True;
Null ( Right ( MakeRoot ( u ) ) ) = True;
− аксиомы для SetLeft (∀u: α; ∀ b:NonNullBT: Null ( Left ( b ) ) ):
Left ( SetLeft ( u , b ) ) = MakeRoot ( u );
Root ( SetLeft ( u , b ) ) = Root ( b );
Right ( SetLeft ( u , b ) ) = Right ( b );
− аксиомы для SetRight (∀u: α; ∀b:NonNullBT: Null ( Right ( b ) ) ):
Right ( SetRight ( u , b ) ) = MakeRoot ( u );
Root ( SetRight ( u , b ) ) = Root ( b );
Left ( SetRight ( u , b ) ) = Left ( b ).
На уровне функциональной спецификации все эти функции могут быть
выражены через функцию ConsBT. При этом приводимые далее соотношения
имеют место для переменных u, b1, b2 таких, что ∀u: α;
∀b2:NonNullBT: Null ( Right ( b2 ) ); ∀b1: NonNullBT: Null ( Left ( b1 ) ):
MakeRoot(u) = ConsBT( u, Λ, Λ);
SetLeft ( u , b1) = ConsBT ( Root ( b1), MakeRoot ( u ), Right ( b1) );
SetRight ( u , b2 ) = ConsBT ( Root ( b2 ), Left ( b2 ), MakeRoot ( u ) ).
Абстрактные функции SetLeft и SetRight удобнее реализовать в виде проце-
дур, например:
procedure SetLeft ( a: Elem; b: BinT);
{Pred: Not Null ( b ) & Null ( Left ( b ) ) }
begin
if Null ( b ) then Otkaz ( 5 )
else
if Not Null ( Left ( b ) ) then Otkaz ( 6 )
else b^.LSub := MakeRoot ( a )
end {SetLeft}
Рассмотрим ссылочную реализации ограниченного бинарного дерева на
базе вектора:
type Adr = 0 .. MaxAdr; {диапазон “адресов”в векторе }
BinT = Adr; {представление бинарного дерева }
Node = record { узел : }
Info : Elem; { = содержимое }
LSub : BinT; { = левое поддерево }
RSub : BinT { = правое поддерево }
end { Node };
Mem = array [Adr] of Node { вектор для хранения дерева }
61
Страницы
- « первая
- ‹ предыдущая
- …
- 59
- 60
- 61
- 62
- 63
- …
- следующая ›
- последняя »
