データ構造(6)-検索と並べ替え

検索


個人的なメモ、侵入


バイナリ検索は、バイナリ検索とも呼ばれます。

彼は尋ねなければなりませんシーケンシャルストレージ構造そして必要整然とした

ここに写真の説明を挿入

int Search_Bin(SSTable ST,KeyType key)
{
	low=1;
	high=ST.length;
	while(low<=high)
	{
		mid=(low+high)/2;
		if(ST.R[mid].key==key) return mid;
		else if(ST.R[mid]>key) high=mid-1;
		else low=mid+1; 
	}
	return 0;	
}

ここに写真の説明を挿入

バイナリ配置ツリー

バイナリソートツリーの特性:左側のすべてのサブツリーはルートノードよりも小さく、右側のすべてのサブツリーはルートノードよりも大きく、サブツリーもバイナリソートツリーです。
ここに写真の説明を挿入

ステートメント

typedef struct
{
	KeyType key;		//关键字域
	InfoType otherInfo;	//其他数据项
}ElemType;
typedef strcut BSTnode;
{
	ElemType data;
	struct BSTnode *lchild,*rchild;
}BSTndoe,*BSTree;

インサート

void InsertBST(BSTree &T,ElemType e)
{
	if(!T)
	{
		BSTree S=new BSTree;
		S->data=e;
		S->lchild=S->rchild=NULL;
		T=S;
	}
	else if(e.key>T->data.key) InsertBST(T->rchild,e);
	else InsertBST(T->lchild,e);
}

作成する

void CreatBST(BSTree &T)
{
	T=NULL;
	cin>>e;
	while(e.key!=ENDFLAG)
	{
		InsertBST(T,e);
		cin>>e;
	}
}

バランスの取れたバイナリツリー

バイナリソートツリーの検索パフォーマンスはバイナリソートツリーの構造に依存し、バイナリツリーの形状はデータセットに依存します

順序付けされている場合、検索時間の複雑さはO(n)です。構造が妥当な場合、検索時間の複雑さはO(log 2 n)です。実際、ツリーの高さが小さいほど、検索は高速になります。したがって、AVLツリーとも呼ばれるバランスの取れたバイナリツリーが提案されます。

バランスの取れたバイナリツリーまたは空のツリーには、次の特性があります。
(1)左右のサブツリーの深さの差の絶対値が1を超えない
(2)左右のサブツリーもバランスの取れたバイナリツリーです。

ここに写真の説明を挿入
ここに写真の説明を挿入


バランスバイナリツリーのバランス調整方法

明らかに、ツリーをバランスの取れたバイナリツリーに構築すると、検索効率が向上します。
したがって、アンバランスのバイナリツリーをバランスの取れたバイナリツリーに変換する方法は次のとおりです。

バイナリツリー上のノードのバランス係数(バランス係数、BF)が、ノードの左右のサブツリーの深さの
として定義されている場合、バランスの取れたバイナリツリー上のすべてのノードのバランス係数は-1しか見つけることができません。 0と1。
バイナリツリーノードのバランス係数の絶対値1より大きい限り、バイナリツリーは不均衡です

ここに写真の説明を挿入
ここに写真の説明を挿入


ここに写真の説明を挿入


ここに写真の説明を挿入


ここに写真の説明を挿入


BツリーのMオーダーの意味は何ですか?

ここに写真の説明を挿入


ここに写真の説明を挿入


Bツリーの背景

ここに写真の説明を挿入


2番目の検出方法

タイムトンネル


つづく。(2021/1/16)

おすすめ

転載: blog.csdn.net/Touale/article/details/112709667