最近看编程之美的一些心得(不断更新)

排序复杂度:O(N²),O(N*logN),O(N)

查找负责度:O(N),O(logN),O(1)


其中排序复杂度为N²的为直接排序,选择排序,希尔排序

NlogN的为归并排序,快速排序和堆排序

N的一般是做hash或者通过bitmap,布隆过滤器等。

如果考虑到提高排序效率,则提高到log级别时,要考虑二分法排序;提高到O(N)级别则考虑bitmap或者hash了。

但是使用hash要注意hash冲突,冲突过大时则也有复杂度升高的风险。


查找:无序序列为O(N),有序序列为logN(二分查找),最极端的为hash查找或者bitmap查找,则是O(1)级别。


插入删除元素一般来讲和查找是对偶的

例如数组查找方便O(N)或者O(logN),但是增删则为O(N)复杂度

链表增删都为O(1)复杂度(当直接找到改点时),查找则为O(N)。

如果查找和增删要求同步提高且数据集没有强关系,则可以考虑红黑树。

红黑树的增删查的复杂度都是O(logN)。


另外还有就是充分应用“空间换时间”的手段

1:如BYTE数据中1 的个数,直接申请255个数据存放0~255中1的个数

2:如计算N数组中任意N-1乘积的最大值,文中很巧妙的利用了两个数组分别表示前i-1个数组的成绩和后N-i个数据的成绩。

一次扫描完成之后,这两个数组填满。再遍历一次,则可以依次计算出“分别去除当前第i个数据后的N-1个数据的乘积”,最后比较即可。

此时的复杂度为O(N)。至于后面的根据乘积和0比较则属于数据本身分析,个人觉得不算算法范畴提高。


最后就是关于DP,动态规划方面的。

这块还在学习中。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值