920quiz+922复杂度+927quiz2

发布于:2022-12-06 ⋅ 阅读:(360) ⋅ 点赞:(0)

1、注意双向链表的操作中 只要默认已经访问了链表上的第k个元素,则其他operation就都是θ(1)*

2、注意单向链表 替换第k个元素 是θ(1)*

Quiz1:

1、别忘了数组扩容是2的n次方

2、逆波兰就是 从左往右顺序



922 关于递归&时间复杂度的分析方法

脑子乱了一天了,一直算不出来T(n) 先在网上看到面试题:

带你逐步分析递归算法的时间复杂度 - 知乎

递归算法的时间复杂度本质上是要看: 递归的次数 * 每次递归中的操作次数

但是还没算出来(😵)

924

递归方程的一些解法已经掌握(如更换变量(联想一下 2的k次方,直接展开等)

另外可以领用wolfram在线直接计算

另外那个double-hash中的i实际上对应的是每一个key,也就是说每一次i都是从0开始的!







927第二次小测

错误百出!!!!!!!!!!!!!!

1、关于O的传递,quiz2的第一道判断题就错了,一定要注意把极限式子列好列完整,

如f(n) = O(g(n)),f(n) = O(h(n)), 你不可能直接判断f(n)和g(n)h(n)的关系啊!

习题课谈到一点特别好:没有特殊说明,谁知道他们一定是无穷大呢?

例如1/n = O(1/n)有什么问题吗?

2.哈希碰撞的原因:首先是哈希表的大小(一共就十个可放的地方不冲突才怪)

再就是哈希函数了

另外别忘了数据本身的因素!你要存的数据要是趋向性太强(如一堆差不多一样大的数字),不碰才怪!

3、关于渐进分析的术语:

asymptotically tight bound 渐进紧确界 是Θ 

区分:渐进上界 asymptotically upper bound是大O

算法导论中特别提到,由大O记号提供的渐进上界 可能是也可能不是渐进紧确的

如2n^2 = O(n^2) 是渐进紧确上界 这是没错的

这也就是quiz中谈到的 asymptotically upper tight bound

渐进下界aymptotically lower bound 是大Ω

非渐进紧确的下界是ω,非渐进紧确的上界是小o

4、关于double hashing和quadratic probing的定量方程记不住!必须记住!

二次探查quadratic probing:

h(k,i) = (h'(k) + c1*i + c2*i^2) mod m

双重散列 double hashing

h(k,i) = (h1(k) + i*h2(k)) mod m

其实关键就是注意double hashing里面的h2那个辅助散列函数(auxiliary hash function)是直接和i相乘的,这也是quiz2最后一道判断题做错了的原因!!!!!!!!!!!!!

5、最后一个小知识点:分块算法(竞赛常用,优雅的暴力)

其实是一种常见的时间复杂度带根号的算法

分块算法(简洁易懂) - 范仁义 - 博客园

https://blog.csdn.net/pengwill97/article/details/80900930

这也对应了我们quiz的最后一题,T(n) = B^2 + n^2/B^2 

这种形式一下子就得想到基本不等式啊(三个月不碰数学就废了是吧)

一列答案不就出来了!


网站公告

今日签到

点亮在社区的每一天
去签到