算法(1)--时间和空间复杂度 初识 算法定义 算法是独立存在的一种解决问题的方法和思想:求解一个问题步骤的描述 是求解问题的方法 它是指令的有限序列 其中每条指令表示一个或者多个操作对于算法而言,实现的语言并不重要,重要的是思想 算法特性确定性:无二义 有穷性:合适时间内可以执行 输入项 输出项 可行性:算法的每一步都是可行的
原博客地址:https://www.cnblogs.com/xiaochun126/p/5086037.html各种排序算法时间复杂度各种排序算法比较 各种常用排序算法类别排序方法时间复杂度空间复杂度稳定性复杂性特点最好平均最坏辅助存储 简单 插入 排序直接插入O(N)O(N2)O(N2)O(1)稳定简单 希尔排序O(N)O(N1.3)O(N2)O(1)不稳定复杂 选择 排序直接选择O(N)O(N2)O(N2)O(1)不稳定 堆排序O(N*log2N)O(N*log2N)O(N*log2N)O(1)不稳定复杂 交换 排序冒泡排序O(N)O(N2)O(N...
学习数据结构与算法的目的为了提高代码的执行效率及降低代码所占用的存储空间,因此时间复杂度及空间复杂度是评估一个算法的重要因素。而关于这两者的分析统称为复杂度分析。 复杂度是描述算法执行时间(或占用空间)与数据规模的增长关系。为什么需要复杂度分析?在没有引入复杂度分析之前,我们通常采用基准测试这种比较直接的方法来评估一个算法的好坏,这种方法也叫做事后统计法。 事后统计法:当我们将代码运行之后,通过统计、...
算法的基本要素【三个】(1)顺序结构(2)条件结构(3)循环结构 算法的一般性质【四个】(1)通用性:对于那些符合输入类型的任意输入数据,都能根据算法进行问题求解,包保证计算结构的正确性。(2)有效性:组成算法的每一条指令都必须是能够被人或机器确切执行的。(3)确定性:算法每执行一步之后,对于它的下一步,应该有明确的指示。即,保证每一步之后都有关于下一步动作的指令,不能缺乏下一步指令或仅仅含有模糊不清的...
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度,这是算法的时间复杂度的表示。 O后面的括号中有一个函数,指明某个算法的耗时与数据增长量之间的关系。其中的n代表输入数据的量。表达式 说明 示例O(1)最低时间复杂度,也就是耗时与输入数据大小无关, 无论输入数据增大多少倍,耗时/耗空间都不变。 哈希算法(无论数据规模多大,都可以在一次计算后找到目标, 不考虑冲突的话)O(n) 数据量增大...
一、典型插入排序复杂度 1 template<class Type>2 void insertion_sort(Type *a, intn)3 {4 Type key; // cost times 5 for (inti= 1; i< n; i++){ // c1 n6 key=a[i]; // c2 n-17 intj=i-1; // c3 n-18 while( j>=0 && a[j]>key ){ // c4 sum of ti9 a[j+1]=a[j]; // c5...
我有一个带有两个嵌套for循环的递归算法.我想弄清楚Big-O的时间复杂度是多少.public Set<Person> getDistinctCombinedPersons(Collection<Person> persons) {return permutatePersons(new ArrayList(persons), new HashSet<>(persons)); }private Set<Person> permutatePersons(List<Person> personList, Set<Person> personSet) {if(personList.isEmpty() {return personSet;}Set<Person> deepCopyPersonSet = new HashSet<>(pers...
各种常用排序算法类别排序方法时间复杂度空间复杂度稳定性复杂性特点最好平均最坏辅助存储 简单 插入 排序直接插入O(N)O(N2)O(N2)O(1)稳定简单 希尔排序O(N)O(N1.3)O(N2)O(1)不稳定复杂 选择 排序直接选择O(N)O(N2)O(N2)O(1)不稳定 堆排序O(N*log2N)O(N*log2N)O(N*log2N)O(1)不稳定复杂 交换 排序冒泡排序O(N)O(N2)O(N2)O(1)稳定简单1、冒泡排序是一种用时间换空间的排序方法,n小时好2、最坏情况是把顺序的排列变成逆序,或者把...
1、算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 那么一个怎样的算法才能称得上是好算法,也就是说有没有什么标准来评判一个算法的好坏? 在此之前,咱们先来做个试验:用两种方式来实现求裴波那契数列第n项的值,一种方式用递归方式,第二种方式用普通循环方式。在得到结果之前,你猜猜那种方式计算结果更快一些,还是一样快?测试代码如下(JavaScript): /*** ...
转自:https://www.jianshu.com/p/59d09b9cee58每一个优秀的开发者脑中都有时间概念。他们想给用户更多的时间让用户做他们想做的事情。他们通过最小化时间复杂度来实现这一目的。 在你能理解程序的时间复杂度之前,你需要了解最常使用它的地方:算法设计。 所以究竟什么是算法? 简单来说,算法就是一系列被控制的步骤,你通过按序执行这些步骤可以实现一些目标或者产生一些输出。让我们以你祖母烘烤蛋糕的菜单为例子。等等,这也可...
什么是计算机科学?首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已。所谓的计算机科学实际上是对问题、解决问题以及解决问题的过程中产生产生的解决方案的研究。例如给定一个问题,计算机科学家的目标是开发一个算法来处理该问题,最终得到该问题的解、或者最优解。所以说计算机科学也可以被认为是对算法的研究。因此我们也可以感...
JAVA面试中经常问到排序算法问题,本人结合网络上一些资源整理了编写一下常用的Demo,并附带运行结果,希望能帮助到大家。/** * @Title: 冒泡排序 * @Description: 将数组中相邻两位进行比较,较大(或较小)位置靠后 * @Description: 效率低,实现简单 * @Description: 最理想情况的时间复杂度为O(n)/最坏的时间复杂度为O(n^2)。 * @param [3, 8, 2, 5, 7] 输出结果 [2, 3, 5, 7, 8] * @return void */ p...
import java.util.Arrays;public class Sort2 {public static void main(String args[]) {int[] array = new int[] { 3, 5, 1, 2, 7, 6, 4, 8, 7 }; // selectSort(array);quickSort(array, 0, array.length - 1); // bubbleSort(array); // insertSort(array);System.out.println(Arrays.toString(array));}/*** 冒泡排序,升序 两两比较,较大的数往后面冒* * @param array*/public static void bubbleSort...
文章目录一、什么是数据结构?什么是算法?二、复杂度分析三、涵盖内容四、学习方法五、时间、空间复杂度分析六、最好、最坏、平均、均摊时间复杂度 一、什么是数据结构?什么是算法?从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法 从狭义上讲,指某些著名的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等 数据结构是为算法服务的,算法要作用在特定的数据结构之上二、复杂度分析 掌握一个...
引言 美剧《基本演绎法》S2E2中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明“P=NP 问题”。假设人类证明了P=NP 是真的,那么就会有一个算法,能够很快算出某个帐号的密码。《基本演绎法》里面所想象的可能就要成真了,所有的加密系统都会失去效果——应该说,所有会把密码变成数字信息的系统都会失去效果。 一大批耳熟能详的游戏,如扫雷、俄罗斯方块、超级玛丽等,人们将为它们编写出高效的AI,使得电脑...