[算法天天练]选择排序

选择排序 #include<iostream>usingnamespacestd;voidSelectSort(intdata[],intilen){inttemp;intiIndex=0;for(inti=0;i<ilen-1;i++){iIndex=i;for(intj=i+1;j<ilen;j++){if(data[j]<data[iIndex]){iIndex=j;}}if(iIndex!=i){temp=data[i];data[i]=data[iIndex];data[iIndex]=temp;}}}voidPRINT(intdata[],intilen){for(inti=0;i<ilen;i++){cout<<data[i]<<"";}cout<<endl;}intmain(){intdata[]={2,1,5,4,9,0,9,-1,99,3};intilen=sizeof(data)/sizeof(data[0]);PRINT(data,ilen);SelectSort(data,ile...

Floyd算法

Floyd算法1.定义概览Floyd-Warshall算法(Floyd-Warshallalgorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。 2.算法描述1)算法思想原理:    Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)     从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k)+Dis(k,j)<Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j)=...
IT猿 IT猿·2023-05-06

最短路径—Dijkstra算法

Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图G=(V,E)中,假设每条边E[i]的长度为w[i],找到由顶点V0到其余各点的最短路径。(单源最短路径) 2.算法描述1)算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径,就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,...

最小生成树-Prim算法和Kruskal算法

1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex(graphtheory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:VojtěchJarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:RobertC.Prim)独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。 2.算法简单描述1).输入:一个加权连通图,其中顶点集合为V,边集合为E;2).初始化:Vnew ={x},其中x为集合V中的任一节点(起始点),Enew ={},为空;3).重复下列操作,直到Vnew =V:a.在集合E中选取权值最小的边<u,v>,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满...

乘法快速算法

1.十几乘十几:口诀:头乘头,尾加尾,尾乘尾。例:12×14=?解:  1x1=12+4=62x4=812x14=168注:个位相乘,不够两位数要用0占位。 2.头相同,尾互补(尾相加等于10):口诀:一个头加1后,头乘头,尾乘尾。例:23×27=?解:2+1=32x3=63x7=2123x27=621注:个位相乘,不够两位数要用0占位。 3.第一个乘数互补,另一个乘数数字相同:口诀:一个头加1后,头乘头,尾乘尾。例:37×44=?解:3+1=44×4=167×4=2837×44=1628注:个位相乘,不够两位数要用0占位。 4.几十一乘几十一:口诀:头乘头,头加头,尾乘尾。例:21×41=?解:2×4=82+4=61×1=121×41=861  5.11乘任意数:口诀:首尾不动下落,中间之和下拉。例:11×23125=?解:2+3=53+1=41+2=32+5=72和5分别在首尾11×2312...
IT猿 IT猿·2023-05-06

我的新书:《工业机器学习算法详解与实战》

实用性是本书的第一个基本出发点,书中介绍了近年来在工业界被广泛应用的机器学习算法,这些算法经受了时间的考验,不但效果好而且使用方便。此外作者也十分注意理论的深度和完整性,组织各章节的内容时力求由浅入深、推理完整、先后连贯、自成体系,先讲统计学、矩阵、优化方法这些基础知识,再由简到繁地介绍线性模型、概率图模型、文本向量化算法、树模型和神经网络,神经网络主要指的是各种深层网络。跟绝大多数机器学习类的图书不同,本书还会介绍算法周边的一些工程架构及实现原理,比如如何实时地收集训练样本和监控算法指标、参数服务器的架构设计、做AB测试的注意事项等等,了解这些知识对算法工程师是大有裨益的。本书充分照顾机器学习初学者的知识水平,理论体系完整、公式推导清晰,本科毕业的理工科学生都能看懂。另外由于本书跟工业实践结合得很紧密,所以也非常适合于从事算法相关工作的工程师。 我曾经在字节跳动工作过一段时间,那是一家企业文化让我感到很舒适的公司,我说的舒适指的是平等和开放,公司很有野心,员工也都十分优秀,每年校招总能吸引一大批优秀的毕业生前来面试。在面试算法岗的同学里有很大一部分人面临这样的困境:他们很勤...

操作系统cmd算法

1.实验目的(1)掌握命令解释程序的原理;(2)*掌握简单的DOS调用方法;(3)掌握C语言编程初步。2.实验要求编写类似于DOS,UNIX的命令行解释程序(1)自行定义系统提示符(2)自定义命令集(8-10个)(3)用户输入HELP以查找命令的帮助(4)列出命令的功能,区分内部还是外部命令(5)用户输入QUIT退出(6)内部命令有dir,cd,md,rd,cls,date,time,ren,copy等。根据教师指定的实验课题,完成设计、编码、测试工作。1.PC微机2.Windows操作系统3.C/C++程序开发集成环境#include<stdio.h>#include<stdlib.h>#include<String.h>main(){charcmd[30][30]={"dir","cd","md","rd","cls","date","time","ren","copy","quit","help"};charstr[10];inti;printf("MicrosoftWindows[版本6.3.9600]");printf("<C>...

php抽奖概率算法(刮刮卡,大转盘)

抽奖,概率不变化:经典的概率算法函数:如下<?php/* *经典的概率算法, *$proArr是一个预先设置的数组, *假设数组为:array(20,30,50), *开始是从1,100这个概率范围内筛选第一个数是否在他的出现概率范围之内, *如果不在,概率变成100-20=80, *就相当于去一个箱子里摸东西, *第一个不是,第二个不是,第三个还不是,那最后一个一定是。 *这样筛选到最终,总会有一个数满足要求。 *这个算法在大数据量的项目中效率非常棒。 */function get_rand($proArr){  $result='';  //概率数组的总概率精度  $proSum = array_sum($proArr);  //概率数组循环  foreach ($proArr as $key => $proCur...

python3数据结构与算法

python内置的数据结构包括:列表(list)、集合(set)、字典(dictionary),一般情况下我们可以直接使用这些数据结构,但通常我们还需要考虑比如搜索、排序、排列以及赛选等一些常见的问题。如何巧妙的使用数据结构和同数据有关的算法,在collections模块中包含了针对各种数据结构的解决方法。1、序列分解为变量In[5]:a=(4,5,6)In[6]:x,y,z=aIn[7]:xOut[7]:4In[8]:zOut[8]:6In[9]:yOut[9]:5In[10]:b=['python',222,(2018,9,30)]#嵌套分解变量In[11]:p,n,(year,mon,day)=bIn[12]:pOut[12]:'python'In[13]:nOut[13]:222In[14]:yearOut[14]:2018In[15]:dayOut[15]:30#可以分解的对象只要是可迭代对象如字符串、文件、迭代器和生成器In[16]:s='py'In[17]:x,y=sIn[18]:xOut[18]:'p'#忽略某个值使用下划线代替In[19]:data='python'I...
首页上一页...108109110111112下一页尾页