之前一直对O(logN)这个复杂度如何推导出的存在疑问,这段时间看了一些算法相关的内容,正好看到这个问题,大略研究了一下算是基本解答了我的疑惑;现记录如下

假设有一棵高为H的满二叉树,则它的节点共有N = 2H-1个;

假设需要搜索这棵二叉树中是否存在某个元素,那么对于本次搜索而言,最坏的情况即是搜索到最后一层;那么对于最坏的搜索情况而言,一共会搜索H次(即这棵树的高度);

以上是前提条件

      因为      N = 2H-1,即树的节点数

      又         log2N = log22H-1 = H - 1

      且         对于H极大的情况而言,-1可忽略不计

      所以      搜索次数 H ≈ log2N

      由换底公式可得:log2N = logAN/logA2

      因为      A是某一给定的数

      所以      1/logA2为一常数

      所以      log2N = logAN/logA2 = ClogAN

      所以      O(log2N) = O(ClogAN) = O(logAN)

      所以      对任何底数A,复杂度均可化为O(log2N)

      即         对于任何A叉树,搜索该树中某一个元素是否存在的复杂度均为O(log2N)

      因此      可简化为O(logN)

如果有一大小为N的数组,搜索该数组中的元素是否存在与某树中,该算法的复杂度为O(NlogN)

最后给出复杂度的大小关系:

O(1) < O(logN) < O(√N) < O(N) < O(NlogN) < O(N2) < O(N3) < O(2N) < O(N!)

对O(logN)复杂度的推导的更多相关文章

  1. 等比数列二分求和(logn复杂度)

    看完这个之后,感觉数学简直太厉害了 转载自:http://blog.csdn.net/acdreamers/article/details/7851144 今天我们学习如何有效地求表达式的值.对于这个 ...

  2. 几种复杂度的斐波那契数列的Java实现

    一:斐波那契数列问题的起源 13世纪初期,意大利数论家Leonardo Fibonacci在他的著作Liber Abaci中提出了兔子的繁殖问题: 如果一开始有一对刚出生的兔子,兔子的长大需要一个月, ...

  3. Heap Sorting 总结 (C++)

    各位读者,大家好. 因为算法和数据结构相关的知识都是在国外学的,所以有些词汇翻译的可能不准确,然后一些源代码的注释可能是英文的,如有给大家带来什么不方便,请见谅.今天我想写一下Heap相关的知识,从基 ...

  4. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  5. 1.Two Sum(c++)(附6ms O(n) accepted 思路和代码)

    问题描述: Given an array of integers, return indices of the two numbers such that they add up to a speci ...

  6. 用Java写算法之归并排序

    转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...

  7. 音痴又音痴的LT

    中文题不解释.比赛时想着操作一次sort一次,然而T到死.后来才知道C++内置容器vector这么强大. 内置函数upperbound(查找数组的首地址, 查找数组的尾地址, 待查找元素)为logn复 ...

  8. 音痴又音痴的LT (vector)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=1261 分析:若是每次都想用sort继而来查第k个数,那会T的特别惨~ C++内置函数upperbo ...

  9. Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

随机推荐

  1. Visio画图(一):UML用例图

    Visio画图(一):UML用例图 1.找到UML用例图 A.有网状态 第一步 在搜索框内输入用例图进行搜索. 第二步,移动鼠标直到找到用例图 B.无网状态 第一步 点击特别推荐旁的类别选项 第二步 ...

  2. 微服务监控神器Prometheus的安装部署

    本文涉及:如何在k8s下搭建Prometheus+grafana的监控环境 基本概念 Prometheus提供了容器和云原生领域数据搜集.存储.处理.可视化和告警一套完整的解决方案,最初时是由Soun ...

  3. 洛谷P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有\(N\))个牧场.由\(M\)条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场\(1\)出发到牧场\(N\)去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰 ...

  4. CCPC吉林站

    A.The Fool #include <bits/stdc++.h> using namespace std; inline int read() { ,f=;char ch=getch ...

  5. 解决import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder;报错的问题

    在项目中用到这两个Jar包,但是程序报错. Access restriction: The type BASE64Decoder is not accessible due to restrictio ...

  6. Vuex有哪些作用

    1.Vuex实现路由数据通讯 点击跳转路由的时候,把写入vuex,跳转后取出vuex

  7. django-跨域访问

    pip install django-cors-headers #安装cors INSTALLED_APPS = [ ... 'corsheaders', ... ] MIDDLEWARE_CLASS ...

  8. Codeforces 163C(实数环上的差分计数)

    要点 都在注释里了 #include <cstdio> #include <cstring> #include <iostream> #include <al ...

  9. mybatis 日期比较

    entity @JSONField(name="prj_date",ordinal=13,format="yyyy-MM-dd") private Date p ...

  10. 转 简单聊聊IT软件项目的风险及应对

    https://www.jianshu.com/p/b347adca87a6 前言 上段时间在一家演讲俱乐部做即兴演讲主持人,聊的就是风险管理,与会的小伙伴分享了不同行业的风险问题,令人受益匪浅,今天 ...