E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
算法导论——python实践
算法导论
学习笔记(七)- 快速排序
1快速排序概述快速排序是一个使用分治思想的排序算法,具有如下优点:1.算法的期望运行时间为θ(nlgn),且其中蕴含的常数因子较小,故而快速排序算法通常是实际应用中最好的选择。2.原址排序,排序过程中只需要有限个辅助空间。2算法描述快速排序通过分治的算法设计思想,借助关键子过程partition将输入(这里假定算法的输入为互异关键字key组成的整型数组)划分为比主元小和大的两部分,主元可以随机选择
edwards1130
·
2020-09-12 12:20
算法导论学习笔记
【
算法导论
】快速排序
快速排序快速排序的最坏运行时间为O(n2),虽然这最坏情况的时间复杂度比较大,但快速排序通常是用于排序的最佳实用选择,这是因为其平均性能相当好,平均时间复杂度为O(nlogn),并且O(nlogn)中的隐含常数因子很小。另外,它能够进行就地排序,因此在虚拟内存中也能较好的运行。快速排序算法的性能:其运行时间与划分是否对称有关,而是否对称与主元的选取有关。从渐进的意义上讲,如果对称,就和合并的算法一
nineheaded_bird
·
2020-09-12 12:19
C/C++
算法
算法之道
MIT的
算法导论
课程资料
MIT的
算法导论
第一节课上,教授就说得了算法的performance的重要性,并非简单的只是快一点,慢一点,而是整个解决方案可行与不可行的差别。
tangl_99
·
2020-09-12 12:47
随笔
学习和工作
算法与程序设计
MIT
算法导论
公开课之第7课 哈希表
符号表问题表S中有n条记录,每条记录都有一个键值,并且有其他的一些数据(卫星数据)。允许的操作:1.插入数据(S,x):S←S∪{x}2.删除数据(S,x):S←S-{x}3.查询数据(S,k):存在键值k对应的数据x,则返回x,否则返回nil(空值)。插入删除操作将S变为一个动态集合。直接映射表假设键值来自一个有m个元素的集合U{0,1,…,m-1},键值相互独立。建立数组T[0,…,m-1]来
rye_whiskey
·
2020-09-12 12:13
算法导论公开课笔记
算法导论
MIT
算法导论
-第四讲-快速排序
1.快速排序的描述快速排序算法采用的分治算法,因此对一个子数组A[p…r]进行快速排序的三个步骤为:(1)分解:数组A[p…r]被划分为两个(可能为空)子数组A[p…q-1]和A[q+1…r],给定一个枢轴,使得A[p…q-1]中的每个元素小于等于A[q],A[q+1…r]中的每个元素大于等于A[q],q下标是在划分过程中计算得出的。(2)解决:通过递归调用快速排序,对子数组A[p…q-1]和A[
清文
·
2020-09-12 12:48
算法导论
MIT:
算法导论
——4.2快速排序 以及 排序算法时间复杂度分析
【本课例子】(1)快速排序:分割算法①快速排序程序:QUICKSORT(A,p,r)ifp#includeusingnamespacestd;structLOC{intlow;inthigh;LOC&operator=(LOC&rhs){this->low=rhs.low;this->high=rhs.high;return*this;}};intpartion(inta[],intlow,int
我与编程有个约定
·
2020-09-12 12:36
数据结构与算法
红黑树的创建+线索化+性质检验+笔画输入法
本文红黑树的实现参考《
算法导论
》第二版。写此算法之前,发现网络上很多版本均存在这样那样的错误,于是就自己实现了一个,用于做中文输入法。《导论》2的算法描述省略了很多情况,故不能直接拿来用。
liyinchen808
·
2020-09-12 12:05
性质检验
算法
红黑树的创建
线索化
笔画输入法
输入法
中文输入法
红黑树
线索化
算法导论
学习笔记之快速排序
一、快速排序思想与归并排序类似,快速排序同样使用了分治思想:分解:数组A[p..r]被划分成2个可能为空的子数组A[p..q-1]和A[q+1..r]使得A[p..q-1]中的所有的元素都小于等于A[q]而且A[q+1..r]中的所有元素都大于等于A[q]计算下标q也是过程的一部分解决:递归的调用快速排序对子数组进行排序合并:快速排序是原址的,不需要合并操作二、快速排序算法快速排序(A,p,r)i
会编程の皮卡丘
·
2020-09-12 12:58
算法
麻省理工公开课《
算法导论
》学习笔记:第一讲
主题:简介课程,渐近概念的大局观,插入排序和归并排序,递归式函数时间分析(递归树方法)教材:《
算法导论
》收获:很感动地看到算法分析那个log(n)是为什么出现了,更深层还要听第二讲,若不是因为要准备SAS
dkyqe60682
·
2020-09-12 12:19
《
算法导论
》知识点总结
《
算法导论
》的学习路线:1.MIT网易公开课《
算法导论
》,授课老师也是《
算法导论
》书的作者之一。讲解的内容几乎围绕书籍,不过其中跳跃表和自组织表书中没有,并行算法和缓存参数无关算法还没看。
changfei_1995
·
2020-09-12 12:45
麻省理工《
算法导论
》课程笔记——第1课时
算法分析理论研究:是关于计算机程序性能和资源利用的研究。程序设计方面什么比性能更重要:正确性、简洁、可维护性、成本(时间成本、开销)、稳定性、健壮性、功能性、模块化、安全性、可扩展性、与用户友好性;这么多东西比性能更重要,我们为什么还要关注性能?通常性能的好坏决定是否可行。排序:插入排序:(伪代码)forj0andA[i]>keydoA[i+1]voidInsertionSort(int*num,
Rorschach罗夏
·
2020-09-12 12:00
算法导论
C/C++
算法导论
时间复杂度
归并排序
插入排序
MIT
算法导论
笔记
详细MIT
算法导论
笔记(网络链接)第一讲:课程简介及算法分析(Sheridan)第二讲:渐近符号、递归及解法(Sheridan)第三讲:分治法(1)(Sheridan)第四讲:快排及随机化算法(Sheridan
weixin_30258027
·
2020-09-12 12:53
MIT
算法导论
第四节笔记——快速排序
快速排序是基于分治思想的一种原地排序,但其效率依赖于输入数据的排序状况。视频中分析了最好情况,最差情况,以及最好最差交替出现的情况。研究表明:数据划分为1:9和5:5效率上市一个数量级;最好和最差交替的情况和趋向于最好。随机化快速排序,即随机化选择主元素。其效率不依赖于输入数据的排序状况。它的效率通常是归并排序的三倍。视频中精彩的部分是对随机化快速排序算法复杂度的推导过程,其中不乏精彩的数学技巧。
liyinchen808
·
2020-09-12 12:43
算法
[MIT
算法导论
]笔记
目录算法时间复杂度主方法分治法归并排序乘方问题斐波那契数列算法时间复杂度主方法case1:f(n)=O(n^(log(b)a-ε))(ε>0)=>T(n)=Θ(n^log(b)a)case2:f(n)=Θ(n^log(b)a·(lgn)^k)(k>=0)=>T(n)=Θ(n^log(b)a·(lgn)^(k+1))case3f(n)=Ω(n^(log(b)a+ε))(ε>0)&&存在0T(n)=Θ
Lil_Hoe
·
2020-09-12 12:01
算法
算法
算法导论
mit
算法导论
---算法分析----希尔排序---003
希尔排序是1959年由D.L.Shell提出来的,相对直接排序有较大的改进。希尔排序又叫缩小增量排序基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。算法流程:1)选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;2)按增量序列个数k,对序列进行k趟排序;3)每趟排序,根据对应的增量ti,将待
Alisck
·
2020-09-12 11:08
算法导论
算法导论
学习笔记(11)——贪心算法之哈夫曼树
详细的贪心算法讲解可参看http://www.cnblogs.com/chinazhangjie/archive/2010/11/23/1885330.html贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或
xiangzhang321
·
2020-09-12 08:35
算法导论
动态规划之最优二叉树
原理来自于《
算法导论
》,其实和矩阵的动态规划基本一样,所以这里就不作阐述了。直接上代码,通过构造了最优的root数组后,很容易再创建一个二叉树(这一小部分大家可以自己理解后试试)。
weixin_34138255
·
2020-09-12 07:20
算法导论
-22.3-6 用栈实现DFS
自己写的一个:#include#includeusingnamespacestd;constintmaxV=100,white=0,gray=1,black=2;intv,itime;structSNode{//节点intcolor,d,f,num;SNode*p;};structSAdj{//邻接表intnum;SAdj*next;};SAdj*adj[maxV];SNode*vertex[ma
weixin_34050389
·
2020-09-12 07:45
算法导论
中的最小生成树(一)
写在前面借着对生成树技术的好奇,不知是多少次再次翻开
算法导论
这本书,探寻下最小生成树理论和生成树技术之间的蛛丝马迹,可惜的是没有什么联系。
方法的角落
·
2020-09-12 07:25
算法
Poj1469_匈牙利算法_最大二分匹配
之前在
算法导论
中学习网络流,明白了网络流中的残留网络,增光路和割,但是去模拟书上的伪代码感觉很是费力。就打算从最基本的匈牙利算法做起。
mengxiaozuo
·
2020-09-12 07:54
图论算法
二分图最大匹配和网络最大流的转换
证明过程见
算法导论
。
include-LSS
·
2020-09-12 07:01
网络流
【
算法导论
】最大二分匹配
最大二分匹配问题在现实生活中比较普遍,常常出现在任务分配上。例如,有5个员工,4个不同的任务,而不同员工能够完成不同或相同的任务。也就是说,有的员工只会做这个任务,有的员工会做那个任务,有的员工会做一些任务。图解如下:左边代表员工,右边代表任务,连线代表有能力完成。我们的问题是合理安排员工,尽可能地完成最多的任务数。上图中阴影部分为一种最好的分配方式。前一篇文章中,我们介绍了最大流问题,在这里我们
nineheaded_bird
·
2020-09-12 07:21
C/C++
算法
算法之道
流量
员工
网络
分配
poj 2195 带权重的二分图最大匹配问题
粘的别人的模板,过了,心里很不爽,有空一定要好好读读《
算法导论
》的这个章节。
iteye_3619
·
2020-09-12 06:18
难以捉摸的动态规划
自我阅读《
算法导论
》已久,我对书上给出的解决特定问题所用到的算法并无太多不明朗之处,而且在遇到相似的问题时,可以很快意识到自己熟知的某个算法能够高效的解决这个问题。
iteye_16843
·
2020-09-12 06:46
难以捉摸的动态规划
世界上最漂亮的排序算法!
i+1>=j)return;intk=(j-i+1)/3;stooge_sort(arr,i,j-k);stooge_sort(arr,i+k,j);stooge_sort(arr,i,j-k);}《
算法导论
架构师之路_
·
2020-09-12 05:06
算法导论
程序2--归并排序(Python)
分治法:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题。然后再合并这些子问题新的解来建立原问题的解。归并排序:分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。解决:使用归并排序递归地排序两个子序列。合并:合并两个已排序的子序列以产生已排序的答案。过程merge需要O(n)的时间,其中n=r-p+1是待合并的元素的总数。工作方式如下:玩扑克牌的例子。假设桌上有
夜空霓虹
·
2020-09-12 04:42
算法导论
算法导论
:分治法,python实现合并排序MERGE-SORT
1.简单合并排序法实现思想:两堆已排好的牌,牌面朝下,首先掀开最上面的两张,比较大小取出较小的牌,然后再掀开取出较小牌的那一堆最上面的牌和另一堆已面朝上的牌比较大小,取出较小值,依次类推......"""合并两个已经排好的子列表"""ListB=[2,4,5,7,1,2,3,6]ListB_L=ListB[0:int((len(ListB))/2)]ListB_R=ListB[int((len(L
SanFanCSgo
·
2020-09-12 04:42
python及算法学习
python实现归并排序 --
算法导论
defmerge(A,p,q,r):n1=q-p+1n2=r-qL=list(range(n1+1))R=list(range(n2+1))foriinrange(0,n1):L[i]=A[p+i]forjinrange(0,n2):R[j]=A[q+j+1]L[n1]=10000#这里可以使用无穷大/也可以使用一个比数组最大的元素大的值R[n2]=10000i=0j=0forkinrange(p
t4ngw
·
2020-09-12 03:46
算法导论
python
算法
排序算法
python实现计数排序 --
算法导论
defCOUNTING_SORT(A,B,k):C=list(range(k))foriinrange(0,k):C[i]=0forjinrange(0,len(A)):C[A[j]-1]+=1foriinrange(1,k):C[i]=C[i]+C[i-1]forjinrange(len(A),0,-1):B[C[A[j-1]-1]-1]=A[j-1]C[A[j-1]-1]-=1print(A)
t4ngw
·
2020-09-12 03:46
算法导论
算法
python
排序算法
算法导论
【python菜鸟日记】-02
算法导论
-选择排序
importrandomA=[]foriinrange(5):A.append(random.randint(0,100))printAforjinrange(len(A)):forkinrange(len(A[j:])):ifA[j]>A[j+k]:A[j],A[j+k]=A[j+k],A[j]printA
sydnever
·
2020-09-12 03:14
python
【python菜鸟日记】-01
算法导论
-插入排序
importrandomlist_a=[]foriinrange(5):list_a.append(random.randint(0,100))printlist_aforjinrange(0,len(list_a)):key=list_a[j]printkeyi=j-1whilei>=0andlist_a[i]>key:list_a[i+1]=list_a[i]i=i-1list_a[i+1]=
sydnever
·
2020-09-12 03:14
python
算法导论
:归并排序算法之python实现
A=[99,38,65,97,76,13,27,49]#排序步骤#A=[99,38,65,97][76,13,27,49]#A=[99,38][65,97][76,13][27,49]#A=[38,99][65,97][13,76][27,49]#A=[38,65,97,99][13,27,49,76]#A=[13,27,38,49,65,76,97,99]defmerge(A,p,q,r):n1
学海无涯0216
·
2020-09-12 03:11
算法导论
算法导论
——2.3-2无哨兵情况下的归并排序
没有哨兵时,可以设置一个判断,只要2个分数组的一个到达底端就把另一个的后续元素赋给原数组。具体如下:#includeusingnamespacestd;constintsentry=999999;voidMerge(intia[],size_tp,size_tq,size_tr){inta1[10],a2[10];size_tlen1=q-p+1,len2=r-q;for(inti=0;i=a2[
qq_36393555
·
2020-09-12 03:38
算法导论
排序算法总结之归并排序 Merge Sort
算法伪代码:伪代码来自
算法导论
归并排序算法部分:MERGESORT(int[]A,intp,intr)if(p
fight_to_dead
·
2020-09-12 02:35
算法
排序算法总结之插入排序 Insertion Sort
下图出自
算法导论
的插入排序部分,演示了插入排序的整个过程:算法伪代码:INSERTION-SORT(A)forj=2toA.lengthkey=A[j]//InsertA[j]intothesortedsequenceA
fight_to_dead
·
2020-09-12 02:35
算法
算法导论
排序算法
java
插入排序
insertion
【python菜鸟日记】-03
算法导论
-归并排序
importrandomA=[]foriinrange(random.randint(0,100)):A.append(random.randint(0,100))printAdefmerge_sort(A):iflen(A)<=1:returnAdefmerge(A1,A2):merged=[]whileA1andA2:ifA1[0]<=A2[0]:merged.append(A1.pop(0)
sydnever
·
2020-09-12 01:42
python
排序算法总结之计数排序 Counting Sort
下图是
算法导论
计数排序部
fight_to_dead
·
2020-09-12 01:29
算法
算法导论
笔记:24单源最短路径
最短路径问题:一个带权重的有向图G=(V,E)和权重函数w:E->R,该权重函数将每条边映射到实数值的权重上。一条路径p的权重w(p)是构成该路径的所有边的权重之和,定义从节点u到结点v的最短路径权重δ(u,v)如下:在实际应用中,可以用一张图表示道路交通图,结点代表城市,边代表城市之间的道路,边上的权重代表道路的长度。目标就是找出一条从城市A到城市B的最短路径,边上的权重还可以表示时间、费用、罚
weixin_30287169
·
2020-09-12 01:48
算法导论
第二十五章:有向图的传递闭包
已知一有向图G=,顶点集合V={1,2,...,n},我们可能希望确定对所有顶点对i,j∈V,图G中事发后都存在一条从i到j的路径。G的传递闭包定义为图,其中:在Θ(n^3)时间内计算出图的传递闭包的一种方法是对E中每条边赋以权值1,然后运行Floyd-Warshall算法。如果顶点i到顶点j存在一条路径,则d(i,j)#include#includeusingnamespacestd;typed
iffTimes
·
2020-09-12 01:04
Data
Structure
and
Algorithms
算法导论
第十六章:贪心算法之单任务调度问题
贪心算法是使所做的选择看起来都是当前最优的,通过所做的局部最优选择来产生一个全局最优解。其具有的性质如下:1)贪心选择性质:一个全局最优解可以通过局部最优(贪心)选择来达到。即,在考虑如何做选择时,我们只考虑对当前问题最佳的选择而不考虑子问题的结果。这一点是贪心算法不同于动态规划之处:在动态规划中,每一步都要做出选择,但是这些选择依赖于子问题的解。因此,解动态规划问题一般是自底向上,从小问题处理至
iffTimes
·
2020-09-12 01:32
Data
Structure
and
Algorithms
算法导论
第十四章:区间树
区间树是一种对动态集合进行维护的红黑树,具体设计如下:step1:基础数据结构我们选择的基础数据结构式红黑树,其中每个节点x包含一个区间域x.int,x的关键字为区间的低端点x.int.low.step2:附加信息每个节点x除了区间信息外,还包含一个值x.max,即以x为根的的子树中所有区间的断点的最大值step3:对信息维护必须验证对含有n个节点的区间树的插入和删除都能在O(lgn)时间内完成,
iffTimes
·
2020-09-12 01:32
Data
Structure
and
Algorithms
算法导论
-25.1-最短路径与矩阵乘法
一、介绍二、代码#include#includeusingnamespacestd;#defineN6//点的个数#defineM10//边的个数//邻接矩阵structGraph{intmap[N+1][N+1];introw;Graph(intn):row(n){inti,j;for(i=1;i>start>>end>>value;G.map[start][end]=value;}Print(
windmissing
·
2020-09-12 00:38
【
算法导论
笔记】所有结点对的最短路径问题
基于矩阵乘法的动态规划算法求解所有最短路径EXTEND_SHORTEST_PATHS(L,W)n=L.rowsletL'=l'(i,j)beanewn*nmatrixfori=1tonforj=1tonl'(i,j)=∞returnL'SLOW-ALL-PATHS-SHORTEST-PATHS(W)n=W.rowsL[1]=Wform=2ton-1letL[m]beanewn*nmatrixL[m
jimye
·
2020-09-12 00:09
数据结构与算法
算法导论
25(所有结点对的最短路径问题)
25.1最短路径和矩阵乘法#includeusingnamespacestd;#definen20intL[n][n],M[n][n];typedefstruct{intVNum,ENum;intw[n][n];}Graph;voidcreate_graph(Graph&G){inti,j,v1,v2;cin>>G.VNum>>G.ENum;for(i=0;i>v1>>v2>>j;G.w[v1][
hz5034
·
2020-09-12 00:41
算法导论
算法导论
| 第25章 所有结点对的最短路径问题
零、前言前面讲了单源最短路径问题,指定一个原点一个终点,找到最短路径。但是如果我们要求所有结点对呢?方案一:可以对每一个结点调用一次单源最短路径算法,一共调用|V|次。(每指定一个原点,可以求出其他任何点到该原点的举例)对于权值为非负的图,可以调用Dijkstra算法,不同的优先队列实现得到不同的时间复杂度:①线性数组,O(V^3+VE)=O(V^3)。②二叉堆,O(VElgV),在稀疏图的情况下
solar一抹阳光
·
2020-09-12 00:16
算法导论
算法导论
-第23章-最小生成树:Kruskal算法(基于按秩合并、路径压缩的不相交集合)C++实现
#include#include#includeusingnamespacestd;staticcharelements_index{'a'};usingP=pair;usingPP=pair;structElement{charindex{elements_index++};intrank{0};Element*parent{this};};Element*FIND_SET(Element*x)
VanTrickster
·
2020-09-11 23:32
算法
算法导论
第二十五章:每对顶点间的最短路径
Floyd-Warshall算法设G的顶点为V={1,2,...,n},对于每个k考虑顶点的一个子集{1,2,...,k}。对于任意一对顶点i,j∈V,考察从i到j且中间顶点皆属于集合{1,2,...,k}的所有路径,设p是其中的一条最小权值路径:1)如果k不是路径p中的中间顶点,则p的所有中间顶点皆在集合{1,2,...,k-1}中。因此从顶点i到顶点j且满足所有中间顶点皆属于集合{1,2,..
iffTimes
·
2020-09-11 23:11
Data
Structure
and
Algorithms
算法导论
第二十五章 所有节点对的最短路径问题
基于单源最短路径问题的讨论,解决所有最短路径问题,对每个节点求其最短路径:25.1最短路径和矩阵乘法用动态规划的方法来实现之前的思路:如下示例:使用公式L[i][j]=min(L[i][j],L'[i][k]+W[k][j])求解第一行的过程如下:i=1,j=1l'(1,1)=inf;l(1,1)+w(1,1)=0;l(1,2)+w(2,1)=inf;l(1,3)+w(3,1)=inf;l(1,4
pokeyode
·
2020-09-11 23:19
算法笔记
二叉排序树(Binary Sort Tree,二叉查找树,二叉搜索树)--【
算法导论
】
今天的收获就是二叉搜索树,“好记性不如烂笔头”,写下来加深一下印象;1、首先是了解了二叉搜索树(BinarySortTree)又称二叉查找树,亦称二叉排序树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。2、接下来看的是查询二叉搜索树,查询二叉搜索树的内容比较多;(1)查找:即是查询关键
_Luffy
·
2020-09-11 23:41
C++
算法导论
算法探寻之路
算法导论
例题——钢管切割
《
算法导论
》(CLRS)中第一个dp例题(rodcutting)的C++代码#include#include#includeusingnamespacestd;intmain(){intprice[11
pirate597的跟班
·
2020-09-11 21:07
上一页
13
14
15
16
17
18
19
20
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他