总排序趟数与初始状态无关的有:(除了快速排序和优化的冒泡,其他都是) 算法复杂度与初始状态无关的有:堆排序、归并排序、选择排序、基数排序。 元素总比较次数与初始状态无关的有:选择排序、基数排序。 元素总移动次数与初始状态无关的有:归并排序、基数排序。 快速排序的最坏情形是数组为正序或逆序,如果pos ...
分类:
其他好文 时间:
2020-02-27 16:17:30
阅读次数:
69
排序 参考 "五分钟学算法" 复杂度比较 时间复杂度 O(n2) 各种简单的排序:直接插入、直接选择、冒泡 O(nlog2n) 快速排序、堆排序、归并排序 O(n1+$\lambda$),希尔排序 线性阶O(n)排序,基排序、桶、箱排序 稳定性 稳定排序:冒泡、插入、归并、基数排序 不稳定:选择、快 ...
分类:
编程语言 时间:
2020-02-22 13:40:19
阅读次数:
86
这一算法与之前的Bellman-F=Ford算法一样,都可以判断负环 只需要检查dp [i] [j] 是负数的顶点i即可 1 // 求解任意两点间的最短路径问题 2 // Floyed-Warshall算法 3 // 复杂度O(N^3),N为顶点数 4 5 #include <cstdio> 6 # ...
分类:
编程语言 时间:
2020-02-16 19:07:56
阅读次数:
76
归并排序分治法的一个典型且基本的应用。它的基本思想是:将对N个对象的问题转换成两次对N/2个对象的问题。归并排序减少了数据的比较次数,转而增加了数据的移动次数,使得排序速度相对较快。该算法的递推公式T(N) = 2T(N/2) + O(N)表明其算法复杂度上限为O(NlogN)。下面是其C++代码: ...
分类:
编程语言 时间:
2020-02-15 11:29:41
阅读次数:
74
今天学习了下排序算法,参照别人的思路,自己实现了一次。此文作为今天学习的总结,以便以后复习查看。这篇博客中所提到的所有排序算法均以从小到大排序为例,其他情况请自行类比。 一.基本概念 1.算法分类 2.算法复杂度比较 二.各种算法实现及思路 1.冒泡排序 1.1算法描述 1)比较相邻的元素。如果前一 ...
分类:
编程语言 时间:
2020-02-12 12:42:01
阅读次数:
75
算法复杂度 时间复杂度:用来估计算法运行时间的一个单位;O(n)、O(1) 常见于for循环, 或者log(n)—常见于while循环。循环减半时复杂度为log(n) 常见时间复杂度排序 O(1) < O(logn)< O(n) < O(n^log n) < O(n^2) < O(n^2 log n ...
分类:
编程语言 时间:
2020-02-08 17:58:15
阅读次数:
94
一般ACM或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在 107107 为最佳。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n≤30, 指数级别, dfs+剪枝,状态压缩dpn≤100 => O(n3),floyd,dpn≤1000 => O(n2) ...
分类:
编程语言 时间:
2020-02-03 22:35:29
阅读次数:
89
机器学习介绍 机器学习是实现人工智能的手段,其主要研究内容是如何利用数据或经验进行学习,改善具体算法的性能。 多领域交叉,涉及概率论、统计学、算法复杂度等多门学科。 分类:监督学习、无监督学习、强化学习(增强学习)、半监督学习、深度学习。 scikit-learn库介绍(sklearn) 依赖Num ...
分类:
其他好文 时间:
2020-02-02 20:03:57
阅读次数:
83
双指针算法本质上就是将具有单调性的算法复杂度为O(N^2)的朴素算法通过双指针优化到O(n)的一种优化方法。是一种十分常用的算法。 设计双指针算法我们一般先写出它的朴素算法,然后按照模板: for( int i = 0, j = 0 ; i < n ; i ++) { //check()是按照题目逻 ...
分类:
编程语言 时间:
2020-01-29 19:51:43
阅读次数:
83
题解: 第一次: 算法复杂度过高,导致编译超时,需要优化 #include<stdio.h>#include<math.h>int a[100000001] = { 0 };int p(int n) { int t = n, ret = 0; while (t > 0) { t /= 10; ret ...
分类:
其他好文 时间:
2020-01-29 14:06:40
阅读次数:
56