奇葩面试题,O(logn)的底数是多少?

简介: 奇葩面试题,O(logn)的底数是多少?

大家好,我是老三,最近裸辞了,在面试。

前两天一个面试,只面了十分钟就结束了——

事情是这样的:

面试官:你能说说HashMap的数据结构吗?

老三:数组+链表+红黑树,阿巴阿巴……

面试官:那你说说红黑树的查找复杂度是多少?

老三:O(logn)。

面试官:那这个复杂度的底数是多少?

老三:时间复杂度O(logn)有底数?

面试官:没有吗?

尬住……

面试官:那你再说一下快速排序的时间复杂度?底数是多少?

老三露出智(尴)慧(尬)的微笑……

面试官:好了,我没什么要问的了,这次面试到这结束吧。


结束面试之后,老三意难平,赶紧查一下。

O(logn)是有底数的!

看一下时间复杂度的定义:

在进行算法分析时, 语句总的执行次数 T ( n ) 是关于问题规模 n 的 函 数 。 进 而 分 析 T ( n ) 随 n  的变化情况并确定 T ( n ) 的 数 量级。 算法的时间复杂度,也就是算法的时间量度, 记作: T ( n )=  O(f(n))。它表示随问题规模 n 的增大, 算法执行时间的增长率和f ( n ) 的增长率相同, 称作算法的渐近时间复杂度,  简称为时间复杂度。 其中 f ( n ) 是问题规模 n 的某个函数。

有点抽象对不对,直接上例子,我们来意会一下。

        int n=10;
        int count=1;
        while (count<n){
            count=count*2;
            //时间复杂度为O(1)的运算
            System.out.println(count);
        }

看一下,这个运算,每次 count 乘以 2 之后, 就距离n更近了一分。 也就是说:

破案了,O(logn)确实是有底数的。

这个底数是由什么决定的呢?

算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底,,三分法就会以3为底数,其他类似。

O(logn)底数意义不大!

那问题来了,为什么我们平时不写底数呢?

总不能因为这个底数太难打吧……

我们注意到,时间复杂度的定义: T ( n )= O(f(n))。它表示随问题规模 n 的增大, 算法执行时间的增长率和f ( n ) 的增长率相同, 称作算法的渐近时间复杂度,简称时间复杂度。

假如说我们要比较两个函数f(n)和g(n)的增长快慢,用什么办法呢?

可以使用微积分里的极限:

image.png

老三高数忘完了哈哈,不会推导,总之最后的结果是一个常数。

也就是,假如n非常大的时候,任意底数的一个对数函数都只是相差一个常数倍而已。

所以无论底数是什么,log级别的渐进意义是一样的。也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。

总之:O(logn)已经可以表达所有底数的对数了


花了一个小时,无用的知识又增加了。

简单总结,就是O(logn)有底数,但是没有纠结的必要。

目录
相关文章
|
Web App开发 JavaScript 前端开发
前端机试面试题
一、题目要求 1、请实现“https://channel.jd.com/fashion.html”超值购部分内容。 2、使用CSS+DIV实现页面布局,页面居中,文字颜色效果要求一致。40分 3、鼠标悬停时的动画效果。
3423 0
|
2月前
|
前端开发 数据可视化 安全
2024金三银四必看前端面试题!简答版精品!
2024金三银四必看前端面试题!2w字精品!简答版 金三银四黄金期来了 想要跳槽的小伙伴快来看啊
121 3
|
12月前
2023史上最全Java面试题【完整版】跳槽必备,看完轻松收撕面试官
2023史上最全Java面试题【完整版】跳槽必备,看完轻松收撕面试官
341 0
|
2月前
|
前端开发 安全 Java
Java后端面试必问:十八道面试题及答案最新整理(速看速藏)
Java后端面试必问:十八道面试题及答案最新整理(速看速藏)
285 0
|
前端开发 自动驾驶 算法
这个知识点99%的前端都没有听过,不信你进来看?
这个知识点99%的前端都没有听过,不信你进来看?
74 0
|
存储 资源调度 算法
不管卷不卷,面试还是得问问你G1原理!
所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(Garbage First)回收器的出现颠覆了之前版本CMS、Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G1的论文后,直到2012年JDK7发布更新版本,花了将近10年的时间G1才达到商用的程度,而到JDK9发布之后,G1成为了默认的垃圾回收器,CMS也变相地相当于被淘汰了。
不管卷不卷,面试还是得问问你G1原理!
|
存储 算法
看了齐姐这篇文章,再也不怕面试问树了(上)
在写完了所有线性数据结构之后,今天开启非线性数据结构系列。 我们今天先来看,什么是“树”
105 0
看了齐姐这篇文章,再也不怕面试问树了(上)
|
存储 编译器 C语言
【校招面经】“学完C语言” · 这些面试题肯定难不到你~
“学完C语言” · 这些面试题肯定难不到你~
281 0
【校招面经】“学完C语言” · 这些面试题肯定难不到你~
|
SQL 前端开发 JavaScript
我面试过的那些烂技术大哥
我并不是一个HR,可是我面试过很多人。有年轻的,有年长的,形形色色。 在不同的年纪和岗位上做面试官的内心感觉是不一样的。下面我来讲讲,我做面试官时的一些体验。