时间复杂度 log n
预先知道算法的复杂度是一回事,了解其后的原理是另一件事情。
不管你是计算机科班出身还是想有效解决最优化问题,如果想要用自己的知识解决实际问题,你都必须理解时间复杂度。
先从简单直观的 O(1) 和 O(n) 复杂度说起。O(1) 表示一次操作即可直接取得目标元素(比如字典或哈希表),O(n) 意味着先要检查 n 个元素来搜索目标,但是 O(log n) 是什么意思呢?
你第一次听说 O(log n) 时间复杂度可能是在学二分搜索算法的时候。二分搜索一定有某种行为使其时间复杂度为 log n。我们来看看是二分搜索是如何实现的。
因为在最好情况下二分搜索的时间复杂度是 O(1),最坏情况(平均情况)下 O(log n),我们直接来看最坏情况下的例子。已知有 16 个元素的有序数组。
举个最坏情况的例子,比如我们要找的是数字 13。
十六个元素的有序数组
选中间的元素作为中心点(长度的一半)
13 小于中心点,所以不用考虑数组的后一半
重复这个过程,每次都寻找子数组的中间元素
每次和中间元素比较都会使搜索范围减半。
所以为了从 16 个元素中找到目标元素,我们需要把数组平均分割 4 次,也就是说,
简化后的公式
类似的,如果有 n 个元素,
归纳一下
分子和分母代入指数
等式两边同时乘以 2^k
最终结果
现在来看看「对数」的定义:
为使某数(底数)等于一给定数而必须取的乘幂的幂指数。
也就是说可以写成这种形式
对数形式
所以 log n 的确是有意义的,不是吗?没有其他什么可以表示这种行为。
就这样吧,我希望我讲得这些你都搞懂了。在从事计算机科学相关的工作时,了解这类知识总是有用的(而且很有趣)。说不定就因为你知道算法的原理,你成了小组里能找出问题的最优解的人呢,谁知道呢。祝好运!
转自:时间复杂度 O(log n) 意味着什么呢?
时间复杂度 log n相关推荐
- python二分查找时间复杂度_时间复杂度 二分查找
时间复杂度 时间复杂度是用来估计算法运行时间的一个式子(单位). 一般来说,时间复杂度高的算法比复杂度低的算法慢. 常见的时间复杂度(按效率排序) O(1) < O(log n) < O( ...
- 矩阵的乘法和快速幂的一些理解(适用初学者)
矩阵是线性代数的知识...后悔没好好学了... 第一部分:矩阵的基础知识 1.结合性 (AB)C=A(BC). 2.对加法的分配性 (A+B)C=AC+BC,C(A+B)=CA+CB . 3.对数乘的 ...
- mysql索引_mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结)
原标题:mysql系列:深入理解mysql 索引特性(屡试不爽的mysql索引总结) mysql为什么使用B+ Tree索引,不使用B- Tree索引? 索引顺序如何生效? 什么是覆盖索引? orde ...
- NOIp 数据结构专题总结 (1):STL、堆、并查集、ST表、Hash表
系列索引: NOIp 数据结构专题总结 (1) NOIp 数据结构专题总结 (2) STL structure std::vector #include <vector> std::vec ...
- 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...
- 《仙剑奇侠传online》游戏后台优化分析:CPU、内存与启动时间
一.服务器CPU性能优化 1.1寻路算法JPS优化 MMORPG游戏中服务器中需要对NPC寻路,然而A*算法及其各种优化并不让人满意,因此寻路算法也成为瓶颈之一. 因此,本文介绍JPS的效率.多线程. ...
- 揭秘重度MMORPG手游后台性能优化方案
本文节选自<2018腾讯移动游戏技术评审标准与实践案例>手册,由腾讯互娱工程师王杰分享<仙剑奇侠传online>项目中游戏后台的优化经验,深度解析寻路算法.视野管理.内存优化. ...
- C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和
点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...
- 算法-排序-基数排序(对任意整数排序)
基数排序 时间复杂度:Θ(d(n+k)) d:元素的位数,k元素中每位数的取值区间大小 非原址排序 1⃣️特点该排序只能每次为基数为1位数进行排序 void radix_sort(int *array ...
最新文章
- 关于Vue实例的生命周期created和mounted的区别
- SpringBoot和SpringSecurity整合,未登录请求自定义controller访问前端页面,出现 302状态码,一直在登录页面重定向
- VS2010中如何更改项目名称【转】
- C++用递归方式实现在对不更改随机数组的情况下查找最大值
- 宽屏企业网站源码中英php_宽屏版大气企业网站源码dede网站源码中英文网站模板SEO...
- 《SAS编程与数据挖掘商业案例》学习笔记之十
- PHP 文件上传全攻略
- android鸿洋布局,Android基础ConstrainLayout约束布局的介绍和使用
- PHP判断msg,小程序 msgSecCheck 检查内容是否违规违法,但所有内容都可通过问题...
- Cesium:获取某个entity的位置属性 Cartesian3
- 在线班课程-第10周 http基础知识、nginx网站服务
- linux伪造ip数据包,伪造ICMP数据包的IP层
- 统计学习方法——机器学习和统计学习
- HOJ 1276 士兵队列训练问题(stl, 水题)
- 大学的终结,终结了什么???
- 845透色android10,和平精英TCA845透色
- Python+Pycharm的安装
- Python的异常及处理
- PUCCH(3)matlab验证ZC序列的性质
- 动圈耳机振膜_新手小白必读 1分钟看懂动圈式耳机振膜