Java基于二分搜索树、链表如何实现集合Set复杂度分析-创新互联

小编给大家分享一下Java基于二分搜索树、链表如何实现集合Set复杂度分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

怒江州ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

两种集合类的复杂度分析

在Java底层基于二叉搜索树实现集合和映射 和Java底层基于链表实现集合和映射中以二分搜索树和链表作为底层实现了集合Set,在本节就两种集合类的复杂度分析进行分析:
测试内容:Java底层基于二叉搜索树实现集合和映射和Java底层基于链表实现集合和映射中使用的书籍。
测试方法:测试两种集合类查找单词所用的时间

 //创建一个测试方法 Set set:他们可以是实现了该接口的LinkedListSet和BSTSet对象
 private static double testSet(Set set, String filename) {
  //计算开始时间
  long startTime = System.nanoTime();
  System.out.println("Pride and Prejudice");
  //新建一个ArrayList存放单词
  ArrayList words1 = new ArrayList<>();
  //通过这个方法将书中所以单词存入word1中
  FileOperation.readFile(filename, words1);
  System.out.println("Total words : " + words1.size());

  //增强for循环,定一个字符串word去遍历words
  //底层的话会把ArrayList words1中的值一个一个的赋值给word
  for (String word : words1)
   set.add(word);//不添加重复元素
  System.out.println("Total different words : " + set.getSize());

  //计算结束时间
  long endTime = System.nanoTime();
  return (endTime - startTime) / 1000000000.0;//纳秒为单位
 }

 public static void main(String[] args) {
  //基于二分搜索的集合
  BSTSet bstSet = new BSTSet<>();
  double time1 = testSet(bstSet, "pride-and-prejudice.txt");
  System.out.println("BSTSet:" + time1 + "s");
  System.out.println("————————————————————");
  //基于链表实现的集合
  LinkedListSet linkedListSet = new LinkedListSet<>();
  double time2 = testSet(linkedListSet, "pride-and-prejudice.txt");
  System.out.println("linkedListSet:" + time2 + "s");

 }

结果:BSTSet的速度比LinkedListed的速度快

Java基于二分搜索树、链表如何实现集合Set复杂度分析

集合的时间复杂度分析:

1.链表情况

Java基于二分搜索树、链表如何实现集合Set复杂度分析

2.二叉搜索树的情况

在基于二叉搜索树的情况下,增加、查询、删除的与二叉搜索树的深度有关,每次操作均为从根节点到某一一支子树的叶子节点之间进行操作,时间复杂度为0(h),h表示二叉搜索树的高度(层数)。

Java基于二分搜索树、链表如何实现集合Set复杂度分析

二叉搜索树复杂度如下:

Java基于二分搜索树、链表如何实现集合Set复杂度分析

2.1 探究链表情况下的n与二叉搜索树的h的关系

Java基于二分搜索树、链表如何实现集合Set复杂度分析

下面对n与h关系进行推导:

2.1.1 采用满二叉树的情况进行分析(最优情况)

采用满二叉树(每个节点都有左右节点,除了叶子节点)来进行分析的原因为满二叉树是一种极端情况,如下图:

Java基于二分搜索树、链表如何实现集合Set复杂度分析

从上图中关于h层总共有多少个节点有如下推导:

Java基于二分搜索树、链表如何实现集合Set复杂度分析

假设节点个数为n个则有如下关系:

Java基于二分搜索树、链表如何实现集合Set复杂度分析

针对都是log级别的关系,底数是多少不影响它是log级别的则有:

Java基于二分搜索树、链表如何实现集合Set复杂度分析

2.1.2 单个孩子情况----二叉搜索树最坏情况(节点数等于其高度)

比如:下面这种二叉搜索树

Java基于二分搜索树、链表如何实现集合Set复杂度分析

对于这种只有单个孩子的情况,此时二叉搜索树退化成了链表,此时的时间复杂度为O(n)。

2.2 两种集合复杂度统计

Java基于二分搜索树、链表如何实现集合Set复杂度分析

2.2.1 logn和n的差距

Java基于二分搜索树、链表如何实现集合Set复杂度分析

java基本数据类型有哪些

Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。3、字符类型,字符类型的关键字是“char”。4、布尔类型,是表示逻辑值的基本数据类型。

看完了这篇文章,相信你对“Java基于二分搜索树、链表如何实现集合Set复杂度分析”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联网站建设公司行业资讯频道,感谢各位的阅读!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前题目:Java基于二分搜索树、链表如何实现集合Set复杂度分析-创新互联
分享路径:http://myzitong.com/article/csoohp.html