算法
文章平均质量分 73
ChichiZhou
这个作者很懒,什么都没留下…
展开
-
时间复杂度与空间复杂度
时间复杂度:时间复杂度和程序执行的语句次数有关。程序执行的语句数越多,那么耗时越长,时间复杂度越高。但是时间复杂度是一个对大规模数据的估计,所以只在乎最高次幂,不管系数和低次幂。常见的时间复杂度如下表所示:时间复杂度的推导:能够节省时间的巧妙算法,其本质都是通过一个时间复杂度是O(1)的操作,将原来规模为N的问题变为规模为N/2的问题。所以能够推导出二分法的时间复杂度为:T(n) = T(n/2)...原创 2018-06-11 12:39:34 · 165 阅读 · 0 评论 -
堆Heap与栈Stack
栈Stack:每个进程在产生之后,OS会自动给这个进程分配一个存储进程中参数,局部变量,返回值的内存空间。这部分内存空间叫做栈。这个内存空间是固定大小的。所以在递归的时候,我们不断调用函数本身,就会在栈中不断添加函数的传入参数,局部变量,返回值。当调用函数次数非常多时,会沾满整个栈的空间,造成 stack overflow的错误。堆Heap:如果在进程中需要创建别的容器(比如创建一个数组),那么这...原创 2018-06-11 09:55:00 · 146 阅读 · 0 评论 -
排序算法——快排,归并
快速排序:从数组中随机选一个数,比这个数大的放右边,比这个数小的放左边。快排中的一个细节:如果一个数等于P的时候,既可以在左边又可以在右边。这么做是为了避免如果数组中所有的数都一样,则会造成数据的不平衡。快排的目的是能够使得左边和右边的数都差不多,这样的话时间复杂度就不会退化到O(N^2),而是O(N * logN)。这里是用递归实现的。但是这里并不需要回头。那么为什么需要递归呢?原因是循环的时候...原创 2018-06-12 11:58:50 · 220 阅读 · 0 评论 -
接口(Interface)与抽象类(abstract)
接口 (Interface)在Java 中用 implement 来做。接口中的方法只有定义,没有实现,而且默认都是public 的形式。接口中不能定义变量。可以定义常量。Java中的interface:代码中的 List , Set, Map, Queue 叫做 interface。而后面的 ArrayList, LinkedList 则是这个interface的实现方式。所以前面一定是 Lis...原创 2018-06-15 05:12:21 · 345 阅读 · 0 评论 -
算法爬坑记——二分法
二分法: 二分法的时间复杂度是 O(logn) 。其原理是采用一个时间复杂度为O(1)的操作,将问题分为两半之后,只取其中一半。这样就减小了问题的规模。 二分法属于P 问题,即能够在多项式时间复杂度内解决的问题。与P问题相对应的是NP 问题,定义为无法用多项式时间复杂度解决的问题。NP 问题一般是指只能用深度优先搜索解决的问题。 二分法可以用递归或者非递归实现。算法过程中是否采用递归,需要具...原创 2018-06-16 03:22:16 · 272 阅读 · 0 评论