博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
红黑树的删除压力测试和完整性检查
阅读量:5098 次
发布时间:2019-06-13

本文共 1905 字,大约阅读时间需要 6 分钟。

  之前的文章写了红黑树的实现,因为自己实现了插入和删除的算法。为了测试算法的性能,以及算法的正确性,又写了几个函数,用来检查一棵树是否是红黑树,并进行压力测试,代码如下:

1 import 'dart:math'; 2 import 'package:data_struct/tree/tree.dart'; 3  4 void run() { 5   var size = 100000, loops = 1024; 6   check(size, loops); 7   stress(size); 8 } 9 10 void check(int size, int loops) {11   var rd = Random();12   for (var i = 0; i < loops; i++) {13     print('the $i times check...');14 15     var arr = List.generate(size, (_) => rd.nextDouble() * size);16     var tree = RBTree.from(arr);17     var bh = _checkIsRBTree(tree);18     print('black height: $bh\n\r');19 20     for (var d in arr) {21       tree.delete(d);22       _checkIsRBTree(tree);23     }24 25     tree = RBTree.from(arr);26     for (var d in arr) {27       tree.quickDelete(d);28       _checkIsRBTree(tree);29     }30   }31 }32 33 void stress(int size) {34   var rd = Random();35   var arr = List.generate(size, (_) => rd.nextDouble() * size);36 37   var tree = RBTree.from(arr);38   var st = DateTime.now();39   for (var d in arr) tree.delete(d);40   var ft = DateTime.now();41   print('my delete implement cost:\t${ft.difference(st)}');42 43   tree = RBTree.from(arr);44   st = DateTime.now();45   for (var d in arr) tree.quickDelete(d);46   ft = DateTime.now();47   print('    linux implement cost:\t${ft.difference(st)}');48 }49 50 void traverse(RBTNode r, void func(RBTNode r)) {51   if (r != null) {52     traverse(r.left, func);53     func(r);54     traverse(r.right, func);55   }56 }57 58 int _checkIsRBTree(RBTree t) {59   assert(t.isEmpty || (!t.isEmpty && t.root.isBlack));60   return _goThrough(t.root);61 }62 63 int _goThrough(RBTNode r) {64   if (r == null) return 0;65   assert(r.isBlack || (r.isRed && r.parent.isBlack));66   var lbh = _goThrough(r.left);67   var rbh = _goThrough(r.right);68   assert(lbh == rbh);69   return lbh + (r.isRed ? 0 : 1);70 }

 

转载于:https://www.cnblogs.com/outerspace/p/10629158.html

你可能感兴趣的文章
python学习4 常用内置模块
查看>>
Window7上搭建symfony开发环境(PEAR)
查看>>
ResolveUrl的用法
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
一些方便系统诊断的bash函数
查看>>
【转载】基于vw等viewport视区相对单位的响应式排版和布局
查看>>
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
查看>>
jquery中ajax返回值无法传递到上层函数
查看>>
css3之transform-origin
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
Master选举原理
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
小别离
查看>>
微信小程序-发起 HTTPS 请求
查看>>
WPF动画设置1(转)
查看>>
backgound-attachment属性学习
查看>>
个人作业——关于K米的产品案例分析
查看>>
基于node/mongo的App Docker化测试环境搭建
查看>>