二叉查找树BinSearchTree:实验验证节点数与树高呈对数关系

14 篇文章 0 订阅

整体思路

首先创建写入文件流用于储存节点数和其对应的树高,便于后期分析。在这里模拟了1个节点到800个节点的二叉树,每种情况都随机生成了200种情况进行计算平均树高。为了加大随机性,将随机数的最大值提高到了10000。
生成的数据通过 Excel 数据分析功能进行对数函数拟合,通过拟合优度R2得出二叉树的树高是否与节点数成对数关系。


部分代码

int main()
{
	ofstream out;			//写入文件流;
	out.open("E:\\类库与数据结构\\data.txt");
	double Num = 200;	//每个节点的模拟量
	int nodeNum = 800;	//节点个数模拟量	
	int MAX = 10000;	//随机最大值
	srand((unsigned)time(0));

	//遍历有1个节点到有800个节点的情况
	for (int k = 1; k <= nodeNum; k++) {
		double averageHeight = 0;
		//每种节点情况随机生成200个模拟量,求出该节点的平均树高
		for (int j = 1; j <= Num; j++) {
			BinSearchTree<int> mybst;
			int item;
			for (int i = 0; i < k; i++) {
				item = rand() % MAX;
				mybst.insert(item);
			}
			averageHeight += mybst.height();	//平均树高	
		}
		cout << k << "\t" << averageHeight / Num << endl;
		//将平均树高写入文件,便于后期分析
		out << k<<"\t"<<averageHeight / Num << endl;
	}
	out.close();
	cout << "FINISH!!" << endl;
}


实验总结

不仅要对节点数进行模拟计算平均数高,还要通过对各种节点数做分析找出他们之间的函数关系。
对数据的处理可以将树高取对数后与节点数线性拟合,但是这里我用了一个比较“懒”的方法,通过Excel中对数拟合的功能直接拟合出对数关系式和拟合优度R2


实验结果

二叉树树高与节点数的关系分析
利用Excel数据分析功能,将数据进行曲线拟合,并计算拟合优度,得出R2=0.9943,十分接近1,拟合度很好,说明二叉树的树高与节点数呈现对数关系。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值