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
【算法导论】
算法导论
程序15-计数排序(Python)
计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。计数排序的基本思想是:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了,例如,如果有17个元素小于x,则x就应该在第18个输出位置上,当有几个元素相同时,这一方案要略做修改。因为不能把它们放在同一个输出位置上。假设输入是一个数组A[0...n-1],A.length=
夜空霓虹
·
2020-08-24 05:18
算法导论
《
算法导论
》 上的计数排序
#include#includeusingnamespacestd;constintMaxN=40;voidcounting_sort(intA[],intB[],intk)...{intC[MaxN];//for(inti=0;i=0;j--)...{B[C[A[j]]-1]=A[j];C[A[j]]=C[A[j]]-1;}//对于每个A[j],值C[A[j]]即为A[j]在输出数组中的最终位置
yshuise
·
2020-08-24 05:31
C++&&算法&&设计模式
算法导论
— 8.3 基数排序
笔记基数排序的做法为:对一组输入整数,先按最低位数字排好序,然后按次低位数字排好序,如此迭代,直至最后一步按最高位数字排好序,此时所有输入数据已排好序。基数排序要求对单个数字采用的排序算法是稳定的。以十进制数为例,基数排序算法先按个位数字排序,然后按十位数字排序……直至最后按最高位数字排序。下图给出了一个例子。下面给出基数排序的伪代码。在下面的代码中,我们假设输入数组AAA包含nnn个ddd位数,
yangtzhou
·
2020-08-24 05:17
算法导论
算法导论
程序16--基数排序(Python)
基数排序:首先按照最低有效位进行排序,最低位优先(LeastSignificantDigitfirst)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。importmathdefsort(a,radix=10):"""a为整数列表,radix为基数"""K=int(math.ceil(math.log(max(a),radix)))#用K位数
夜空霓虹
·
2020-08-24 05:13
算法导论
算法导论
-计数排序
计数排序并不基于元素的比较,而是一种利用数组下标来确定元素正确位置的算法。计数排序的核心在于将输入的数据值转化为键值存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序算法的时间复杂度O(n+k)(k为整数的范围)。简单描述就是,在一个有确定范围的整数空间中,建立一个长度更大的数组,如当输入的元素是n个0到k之间的整数时,建立一个长度大于等于k的数组。该数组的每一个下标位置的值代表了
PETERMAOSX
·
2020-08-24 04:27
C/C++
算法
《
算法导论
》——计数排序
《
算法导论
》——计数排序计数排序是一个非基于比较的排序算法,该算法于1954年由HaroldH.Seward提出。
我是大龙啊
·
2020-08-24 04:08
计数排序
算法导论
——基数排序(基于计数排序)
2019独角兽企业重金招聘Python工程师标准>>>/***基数排序(低位优先算法)基于计数排序**时间复杂度为O(d*(n+max)),较快排速度更快。但需要额外内存,所以是非原地排序。如果内存吃紧,还是采用快排比较适合*/@TestpublicvoidradixSort(){String[]dates={"20150121","20130122","20150215","20140922",
weixin_33995481
·
2020-08-24 03:43
算法导论
第三版--计数,基数排序
计数,基数的中文读音都一样,这翻译的人还嫌我们计算机不够乱,真的想吐槽。不管了,毕竟代码还是不一样的。1、计数排序(countersort):通过一个上限来统计集合里的数值(或者其他非数值类型映射的数值),并累计比小于自己(包括)的数值的统计的个数,从而形成排序的索引(也就是前面有多少个小于我的,我的位置就确定了)。普通计数排序代码:(仍需优化,valuetype默认是整数类型)1template
weixin_30896763
·
2020-08-24 03:30
《
算法导论
》读书笔记--顺序量选择
在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素。求数组A[p..r]的第i个顺序量:RADOMIZED_SELECT(A,p,r,i)1ifp==r2returnA[p]3q=RANDOMIZED_PARTITION(A,p,r)//随机化的快速插入排序,与插入排序不同的是,其“主元”的下标是调用random在区间内随机产生,根据返回值p分组4k=q-p+1//k的值为q在数
刚入行的小白
·
2020-08-24 02:38
算法
《
算法导论
》读书笔记--快速排序
快速排序是最坏情况时间复杂度为O(n²),最优时间复杂度为O(nlgn),平均时间复杂度为O(nlgn)。最坏情况出现在每一层划分子问题时,分别包含了n-1个元素和0个元素,此时的时间复杂度为O(n²),与插入排序相同;在数组已经有序时其时间复杂度依旧为O(n²),此时插入排序的时间复杂度为O(n)。快速排序使用了分治思想,将数组A[p..r]划分为两个子数组A[p..q-1]和A[q+1..r]
刚入行的小白
·
2020-08-24 02:38
算法
【
算法导论
】基数排序
基数排序时间复杂度:O(n).基本思路:两个数比较大小,我们的直观感觉是先比较高位,若相同则比较低位。但是这样做需要记录额外的数据,浪费空间。而基数排序则是先比较低位,再比较高位。通过各个位的比较进行排序,如果数组元素最大有N位,则总共需要N次排序。注意:按位排序必须是稳定排序,所以在这我选择了计数排序。具体操作见下图:具体实现如下:#include#include#includevoidCoun
nineheaded_bird
·
2020-08-24 02:35
C/C++
算法
算法之道
【
算法导论
】计数排序
计数排序比较排序:通过元素间的比较对序列进行排序的算法称为比较排序。常见的比较排序算法有:冒泡排序法、插入排序法、合并排序法、快速排序法,堆排序法等等。任何比较排序法在最坏情况下的时间复杂度为O(nlogn)。因此,合并排序和堆排序是渐进最优的。非比较排序:用非比较的方法来进行排序的算法。常见的非比较排序算法有:计数排序法、基数排序法、桶排序法。它们都是以线性时间运行的。由于是非比较的,因此下界O
nineheaded_bird
·
2020-08-24 02:35
C/C++
算法
算法之道
【
算法导论
】第八章之基数排序
asdfaspackagecom.zhoujie;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.Random;importjava.util.TreeMap;publicclassRadixSort{publicstaticfinalintARRAY_LENGTH=10;publ
「已注销」
·
2020-08-24 02:00
Algorithm
算法导论
之第八章-计数排序
packagetest2018.test08;importjava.util.Arrays;/***Filename:Class9Jishupaixu.java*Description:计数排序前提是都是整数,而且有上限*例如:数组[9,5,3,1,9,7,5,0,4,3,5,6,7,8,1,7,8,9,2,0]*你统计出来0有2个,1有2个,2有1个…*所有可以得出结果第0至1位是0,第2至3位
孤竹彧
·
2020-08-24 01:31
笔记
算法导论
第三版习题8.3
8.3-1(1)首先按最低位字母进行排序得到SEA,TEA,MOB,TAB,DOG,RUG,DIG,BIG,BAR,EAR,COW,ROW,NOW,BOX,FOX;(2)然后对次低位字母进行稳定排序得到TAG,BAR,EAR,SER,TEA,DIG,BIG,MOB,DOG,COW,ROW,NOW,BOX,FOX,RUG;(3)最后对首位字母进行稳定排序得到BAR,BIG,BOX,COW,DIG,D
obguy
·
2020-08-24 01:44
算法
算法导论
第八章 -- 计数排序
1.算法基本思想:对于在待排序的数组里面的数字,记录小于它的元素的个数,那么记录下来的这个数字就是它在输出数组里面的位置了这里假设元素是互异的。2.如果元素不互异,那么就要对算法里面的一个记录数组作一些操作,以便保持算法的正确性。代码如下:countSort.h#ifndefCOUNTSORT_H#defineCOUNTSORT_H#include#includestd::vectorcountS
Greetlist
·
2020-08-24 01:03
c++
algorithm
and
data
structure
算法导论
基数排序
#include#include#include#include#defineMAXLEN10typedefstruct{intkey;intvalue[MAXLEN];intlen;}SortType;voidprintA(inta[],intlen){for(inti=1;i=1;i--){intk2=a[i]%(int)pow(10.0,n);k2=k2/(int)pow(10.0,n-1)
万万岁
·
2020-08-24 01:03
算法导论
《
算法导论
》学习之基数排序
基数排序是一种非比较排序,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的时间复杂度为O(n),但是不一定优于O(nlgn),因为基数排序的时间复杂度前面有个系数K,如果K比较大的话,那其时间复杂度将超过O(nlgn)其具体原理如下:先前数值按位进行拆分,然后从低位开始,根据最低
lyapple2008
·
2020-08-24 01:00
算法导论学习
RSA模重复平方算法小示例
RSA模重复平方算法实现示例代码模重复平方算法编码实现的两种思路:2.1.先算高位再算低位2.2.先算低位再算高位本文参照《
算法导论
》做了些许尝试,发现matlab和C++都发生了超限情况。
jp_zhou256
·
2020-08-24 00:20
算法导论
【
算法导论
之四】计数排序
1.计数排序的思想我们之前接触过的例如:插入排序,归并排序,快速排序,堆排序等都是基于集合元素之间的比较这一基本的思想,它们执行的时间复杂度最优是趋于O(nlgn),而计数排序的运行机制不是基于集合元素之间的大小比较,什么???不做比较还能区分出元素之间的大小?是啊,算法就是这么伟大,我刚看它的时候也是激动不已呢。计数排序的基本思想是:对每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可
Monkey_Online
·
2020-08-24 00:41
算法导论
算法导论
之计数排序
1.计数排序是一种非常快捷的稳定性强的排序方法,时间复杂度O(n+k),其中n为要排序的数的个数,k为要排序的数的组大值。计数排序对一定量的整数排序时候的速度非常快,一般快于其他排序算法。但计数排序局限性比较大,只限于对整数进行排序。计数排序是消耗空间复杂度来获取快捷的排序方法,其空复杂度为O(K)同理K为要排序的最大值。2.计数排序的基本思想为一组数在排序之前先统计这组数中其他数小于这个数的个数
fkyyly
·
2020-08-24 00:28
算法导论
算法导论
计数排序实现
算法导论
计数排序实现空间换时间,时间复杂度是线性的。
oj_fang
·
2020-08-24 00:55
算法导论
《
算法导论
》笔记 第8章 8.3基数排序
【笔记】基数排序按最低有效位数字进行排序。给定n个d位数,每一个数位可取k种可能的值。如果所用的稳定排序需要Θ(d(n+k))的时间正确地堆这些数进行排序。给定n个b位数和任何正整数r<=b,如果采用稳定排序需要Θ(n+k)时间,那么RADIX-SORT能在Θ((b/r)(n+2^r))时间内正确的对这些数进行排序。【练习】8.3-1示出基数排序RADIX-SORT作用于下列英语单词上的过程:"C
cyendra
·
2020-08-24 00:05
算法导论
算法导论
------------计数排序and基数排序
计数排序假设n个输入元素中的每一个都介于0和k之间的整数,k为n个数中最大的元素。当k=O(n)时,计数排序的运行时间为θ(n)。计数排序的基本思想是:对n个输入元素中每一个元素x,统计出小于等于x的元素个数,根据x的个数可以确定x在输出数组中的最终位置。此过程需要引入两个辅助存放空间,存放结果的B[1...n],用于确定每个元素个数的数组C[0...k]。算法的具体步骤如下:(1)根据输入数组A
后打开撒打发了
·
2020-08-24 00:11
算法导论
[
算法导论
]计数排序
计数排序假设n个输入元素中的每一个元素都是在0到k区间的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为Θ(n)基本思想:对于每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放在它在输出数组中的位置上了。伪算法:CountingSort(A,B,k)letC[0..k]beanewarrayfori=0tok//初始化数组。另C中的元素都为0C[i]=0forj=
WinddyAkoky
·
2020-08-24 00:06
【
算法导论
】33.3:寻找凹包(Convex Hull)P:947
1.凹包的定义:将集合Q中所有点都包含的最小多边形,每个点或者在其边上或者在其内部。2.运用:计算二维空间中两个最远的两个点(比在是凹包的点)3.两种方法:(1)Graham‘sscan,采用栈S,首先寻找y点最低或者最左的点,然后排序极角:fori<-3tomdowhiletheangleformedbypointsNext-To-Top(S),Top(S),andpimakesanonleft
Baocai3000
·
2020-08-23 23:33
数据结构/算法
算法导论
【
算法导论
】c++实现计数排序
计数排序的基本思想为:对每一个输入的元素x,确定出小于x的元素的个数。有了这一信息,那么就可以把x直接放到相应的位置上。特点:1需要临时的存储空间,如果排序数据范围特别大时,空间开销很大。2适合于排序0-100以内的数据。3排序的时间复杂度为O(n)。#include#includeconstintsize=100;int*array_list;int*array_list_a;voidprint
李亚超
·
2020-08-23 23:42
C/C++
算法导论
算法导论
学习笔记——基数排序
/***基数排序:n个d位数进行排序,先从最低有效位进行,由于每位数字都界于0到9(只考虑整数),*可以用计数排序对每一位进行排序,重复这一过程直到对所有的d位数字都进行了排序。*由于计数排序的复杂度为O(n+k),所以基数排序的时间复杂度为O(d(n+k))*/publicclassRadixSort{/***用计数排序将arr数组按第i位排序*@paramarr要排序的数组*@parami第i
FG2006
·
2020-08-23 23:28
数据结构与算法
算法导论
例程——堆排序(大根堆为例)
堆排序是具有原址性的排序,复杂度为o(nlgn)。首先要建立一个“堆”的概念,堆可以理解为二叉树的一种,是节点间有序关系的完全二叉树,即除了最后一层外节点没有缺失,所以可以用数组来表示。对于下标为i的节点,它的子树的左节点的下标为2*i,右节点为2*i+1,父树的节点下标为i/2(向下取整)。而在程序设计中,使用位运算来代替直接*2可以提高运行速度。而某些编译器中会把一些特定的乘法运算改写为位运算
CFhM_R
·
2020-08-23 23:08
算法导论
《
算法导论
》读书笔记--计数排序&基数排序
计数排序是用空间换取时间的算法,其假设n个输入元素中的每一个都在0到k区间内的一个整数,其中k为某个整数。当k=O(n)时,排序的运行时间为Theta(n)。基本思想:对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。输入数组为A[1..n]辅助数组:B[1..n]存放排序的输出,C[1..k]提供临时存储空间(存放A中数组元素值的出现次数)。伪代
刚入行的小白
·
2020-08-23 22:32
算法
算法导论
之第八章-基数排序
比计数排序优秀的点还在,计数排序要建立对象,如果数字过大,会导致建的数组过长而堆溢出/**Filename:Class9Jishupaixu.javaDescription:基数排序:和我们分类的思想很像,比如说高考成绩排序,我们先把400分以上归成一类,在排300-400的,排完后,排300-310分的…但是,基础排序是反过来,因为先排高位会导致再排较低位时高位顺序变了,所以,先排低位。和计数排
孤竹彧
·
2020-08-23 22:25
笔记
算法
[
算法导论
]基数排序
#include#include#include#defineLength10usingnamespacestd;voidCountSort(intnuma[],intlen,intrange,intd);//参数:带排序数组数组长度数组中元素从0到最大值的取值个数数组的位数voidRadixSort(intnum[],intlen,intd);//待排数组数组长度最大元素的位数voidOutp
Extreme_Programmer
·
2020-08-23 22:23
算法导论
算法导论
例程——基数排序
基数排序(radix_sort)可以被称为是计数排序的升级版,他的原理是基于以前的卡片式排序方法,这里把要排序的每个整数看作是一张卡片,把整数的各位数字看作是卡片上的关键字,在进行计数排序时,我们逐位扫描整数的各位数字,并以该数字为关键字进行整体的排序,从低位到高位,在排序时我们可以借助结构体进行辅助,基数排序本身提供思路,它使用的是较为稳定的技术排序作为核心的排序算法,这样保证算法时间复杂度为o
CFhM_R
·
2020-08-23 22:41
算法导论
JAVA总结(五)----- 容器(二)-----Set
注:以下概念与代码均参考自:《java编程思想》、《
算法导论
》、《EffectiveJava》、《数据结构和Java集合框架》目录一、为什么选择Set二、基于红黑树实现——TreeSet1、红黑树2、TreeSet
和樂
·
2020-08-23 21:45
红黑树
HashSet
TreeSet
散列表
JAVA总结(五)----- 容器(一)-----List
注:以下程序与概念均参考自《java编程思想》、《数据结构与java集合框架》、《
算法导论
》目录一、集合是什么二、基于数组实现的——ArrayList1、类标题2、类字段3、构造方法4、add()以及数组扩容
和樂
·
2020-08-23 21:45
《
算法导论
》读书笔记之第16章 0-1背包问题—动态规划求解
今天开始继续看
算法导论
。今天继续学习动态规划和贪心算法。首先简单的介绍一下动态规划与贪心算法的各自特点及其区别。然后针对0-1背包问题进行讨论。最后给出
weixin_34038293
·
2020-08-23 20:37
动态规划问题之求解数列中递增数列的长度
最近在准备面试,当然算法是必不可少的,但是自己平常做的更多的是工程方面的东西,涉及到的最多就是数据结构浅层的东西,还没有花很大的精力来研究算法,但是面试中算法肯定是不可缺少的,所以这几天一直在恶补算法,今天看
算法导论
时看到了动态规划算法
会敲代码的咩
·
2020-08-23 19:47
python
算法
算法导论
最长公共子序列(按自己思路写的)
#include#include#includeintgetlastPos(char*s,charc,intpos){intlen=strlen(s),i;for(i=pos-1;i>=0;i--){if(c==s[i])returni;}returni;}int**initM(char*x,char*y){intxlen=strlen(x);intylen=strlen(y);inti,j;//
万万岁
·
2020-08-23 17:18
算法导论
算法导论
:c++实现红黑树
数据结构性质这里定义一个结构体保存颜色enumcolorRB{black=0,red,};structTreeNode_RB{intval;colorRBcolor;TreeNode_RB*left;TreeNode_RB*right;TreeNode_RB*parent;TreeNode_RB(intx,colorRBc):val(x),left(NULL),right(NULL),parent
Imcy
·
2020-08-23 12:53
C++
算法导论
算法导论
:c++实现图
图的表示这里用结构体来表示图G,和图顶点GraphNode,后面要用到的顶点颜色用枚举类型表示enumcolor{white=0,gray,black};structgraphNode{charname;//顶点名structgraphNode*pre;//前驱节点intd;//深度colorc;//节点颜色graphNode(charn):name(n),pre(NULL),c(white),d
Imcy
·
2020-08-23 12:53
C++
算法导论
算法导论
:c++选择算法
选择算法即给定数组A,选出第i个大的元素,区别于排序后选择这种比较慢的方法,选择算法不需要排序即可选出第i个大元素基于随机快排选择算法首先实现随机快排:随机快排就是在快排的基础上主元用随机数产生。//随机快速排序之随机选择替代主元intrandom_partition(intarray[],intp,intr){inti=(rand()%(r-p+1))+p;//产生[p,r]之间的一个随机数ii
Imcy
·
2020-08-23 12:22
C++
算法导论
算法导论
-----排序的9种实现(C/C++)
目录A、冒泡排序B、选择排序C、插入排序D、折半插入排序E、归并排序F、快速排序G、希尔排序H、堆排序《
算法导论
》中并没有讨论这么多排序算法。在此罗列出来,仅仅是为了今后便于查看。
GNG
·
2020-08-23 11:36
算法导论
编程提高
《算法导论》笔记
如何有效地理解程序中的递归
写在前面最近在重新学习《
算法导论
》这本书,在看到介绍递归的时候,想起了当时学习算法时的痛苦,递归是一种让人有爱与恨的算法理念,之所以爱是因为其的使用思路很清晰且算法复杂度等接近最优,恨就是因为它的思想太过于抽象了
yourzeromax
·
2020-08-23 11:01
算法
用C++学《
算法导论
》——第一章:算法的认识
笔者简介:一名程序男,就读于某中流985高校计算机专业,目前大四,留研本校,3年编程经验。个人心声:学习编程几年了,但是这不是我一开始就确定道路,刚入学时只是个萌新,做过销售、发过传单、踩过楼层,碰壁多了,也明白自己适合的方向,大二开始才真正踏上编程之路。走过了不少弯路,然后才明白,你的编码能力是和发际线成正比的,嘿嘿嘿。大四了,本来是应该养老的生活(保研),但是自己却一直静不下心来,一时想学这个
晓晶
·
2020-08-23 11:44
用C++学《算法导论》
算法导论
(c++实现)chapter4
算法导论
的第四章——分治策略,主要的算法为寻找最大子数组问题,还有矩阵乘法的Strassen算法,还有一些课后的练习题,主要讲了求解递归式的三种方法:代入法(感觉像是猜测,然后用数学归纳法验证),递归树法
zhutou1280
·
2020-08-23 11:26
算法导论
算法导论
c++实现第一章
实现选择排序排序思想:无序数组序列用A[0...n]描述A中某个位置用pos描述,key=A[pos],算法思想是遍历数组A(从位置1开始),如果有A[pos-1]usingnamespacestd;/*实现思想遍历数组arr[1..n-1],将数据放置到arr[0]开头的数组内,组成的数据组是有序的arr[0]到arr[1]如果可以直接交换,能够实现从大到小的排序号的数组,当数据追加时可以将位置
johnsonchengwu
·
2020-08-23 10:50
学习笔记
2019年个人OKR
在读3本KR2:参加软考,获取架构师证书待办:购买参考教材待办:报名参考考试待办:学习网络/书本教程KR3:了解工程硕士的相关事宜,为2020年准备在读书单:Linux/UNIX系统编程手册(上/下册)
算法导论
chenglimie7017
·
2020-08-23 10:53
算法导论
B树的c++实现
算法导论
的课要完成一个小课题,选了B树,花了挺长时间弄完,之前写了几个简单的排序,发现这递归是真的牛批啊。代码部分参考了这位博主。在写前面的插入那一大块,书上有伪代码可以对着写。
andefine
·
2020-08-23 09:05
c++
【
算法导论
】用C++实现快速排序
本算法为【
算法导论
】7.1的C++实现,代码如下:#includevoidswap(int*a,int*b);intpartition(int*array_list,intleft,intright);
李亚超
·
2020-08-23 09:12
C/C++
重用代码之LinuxC&C++
算法导论
算法导论
快排实现(C++)
算法导论
的快排算法,#includeusingnamespacestd;inta[]={9};voidexchange(int&x,int&y){inttem=x;x=y;y=tem;}intpar(inta
东方花未开
·
2020-08-23 09:25
算法
上一页
12
13
14
15
16
17
18
19
下一页
按字母分类:
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
其他