算法与数据结构

题1. 求n个数中的最大值和最小值,最少的比较次数是 3n2 .

解析:最大值和最小值是有逻辑关系的,一个比最大值大的数不需要和最小值去比较;同样,一个比最小值小的数不需要跟最大值比较.

将所有数两两分成一组,共n/2组,进行比较值大的归为新的一组tmax,值小的归为另一组tmin, 再分别和max和min比较,比较了2个n/2次.

左右值数

即“前序遍历树“,有如下特征:
1. lft < rgt
2. lft 小于任何子节点(包括子孙节点)的lft
3. rgt 大于任何子节点(包括子孙节点)的lft
4. 由于左右值是自然数致密分配,子树节点=(rgt - lft - 1) / 2

循环队列

循环队列内有效长度为:$(rear - front + N) % N

HashTable

“哈希取模“是实际工程中去hash code的方法。

P_K = hash(K) mod N

解决hash(K) < 0 的问题,优化为:

h(k) = ((k mod N) + N) mod N

单向链表

有两个较长的单向链表a和b,想要找出同时存在于链表a和b中的节点node,请设计空间使用尽量小的算法。

分析

如果有相同的节点,那么首个相同的节点之后的所有节点都相等,a和b的单向链表将会是横着的Y字型。

算法

  • 遍历a和b得到链表长度lenA和lenB
  • 假设lenA > lenB, fix iA = lenA - lenB, iB = 0
  • 再次遍历a,跳过iA个节点
  • a和b做merge遍历

HashTable and BloomFilter

HashTable 冲突大的时候,尝试不同的hash函数,在桶内需要处理字符串比较。

BloomFilter,适用于key较多的时候
- Insert only
- 有一定误判率
- 空间需求大大减少

Huffman Code

字符串“alibaba”的二进制哈夫曼编码有_位。
算出来9位,答案13位,答案 = my answer + x * n where n is the number of characters and x = 1, 2, 3…

Skip List insert操作最坏情况的时间复杂度是O(N).

用数组表示座位,链表描述每个座位的售票情况。

Red-black Tree

插入操作解决红红冲突

删除操作解决黑黑冲突

B & B+ Tree

  • 都可用于文件的索引结构
  • 都能有效地支持顺序检索
  • 有效支持随机检索
  • 存储空间类似

Merge sort usually takes O(nlogn) time but inserve array may cost O(n^2) time.

冒泡排序的算法复杂度较低。

在长度为n的数组内,找到升序排在n/5位置的元素的最优算法时间复杂度是O(n).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值