算法(二)降低时间复杂度的方法

算法(二)降低时间复杂度的方法

对于一个问题的算法来说,之所以称之为算法,首先它必须能够解决这个问题(称为准确性)。其次,通过这个算法编写的程序要求在任何情况下不能崩溃(称为健壮性)。

如果准确性和健壮性都满足,接下来,就要考虑最重要的一点:通过算法编写的程序,运行的效率怎么样。
在这里插入图片描述

一、降低时间复杂度的方法

1、充分利用已有信息
2、使用某种数据结构
优先级队列使用的两种场景:
想要根据Map的value值对Map进行排序
想要对某几个元素的集合进行排序,此时可以针对这几个元素定义一个类class
3、双指针遍历
4、空间换时间
算法的时间复杂度和空间复杂度是可以相互转化的。
谷歌浏览器相比于其他的浏览器,运行速度要快。是因为它占用了更多的内存空间,以空间换取了时间。
5、数据预处理
6、二分查找
一遇到排序好的数组,下意识就得想到使用二分查找来获得其中某个值。可以参考Java自带的Arrays.binarySearch()方法,注意返回值的正负问题即可。
7、数学推理
数学推理通常可以将一个过程直接化为一个公式得到结果,耐下性子分析过程,推导公式,将非常有利于降低时间复杂度和空间复杂度。

二、几个简单的判定时间复杂度的方法:

1.常数级是O(1):就是不管n多大,始终是一个常数;
比如说执行一条语句,a+b;
2.通常循环是O(n)(一层);(因为执行n次常数级操作)
嵌套通常情况是O(n^m);
3.采用二分策略可以降到log2(n);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章