为您找到搜索结果:1674个
[算法天天练]快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,作为面试题来考试。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。以一个数组作为示例,取区间第一个数为基准数。01234567897265788604283734885初始时,i=0; j=9; X=a[i]=72由于已经将a[0]中的数保存到X中,可以理解成在数组a[0]上挖了个坑,可以将其它数据填充到这来。从j开始向前找一个比X小或等于X的数。当j=8,符合条件,将a[8]挖出再填到上一个坑a[0]中。a[0]=a[8];i++; 这样一个坑a[0]就被搞定了,但又形成了一个新坑a[8],这怎么办了?简单,再找数字来填a[8]这个坑。这次从i开始向后找一个大于X的数,当i=3,符合条件,将a[3]挖出再填到上一个坑中a[8]=a[3];j--; #include<stdio.h>voidQuickSo...
【转帖】常见的排序算法
总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序、分配排序和计数排序。插入排序主要包括直接插入排序,折半插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序主要包括冒泡排序和快速排序;归并排序主要包括二路归并(常用的归并排序)和自然归并。分配排序主要包括箱排序和基数排序。计数排序就一种。稳定排序:假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某种排序法排序后,若这些相同关键字的元素的相对次序仍然不变,则这种排序方法是稳定的。其中冒泡,插入,基数,归并属于稳定排序;选择,快速,希尔,堆属于不稳定排序。 下面是对这些常见排序算法的介绍。未来测试代码的正确性,我们采取了随机生成10个序列,然后先使用C++STL中给出的排序算法sort来得到一个正确的排序,然后再使用我们的方...
[算法天天练]冒泡排序
/**冒泡排序*核心原来:每次比较两个相邻的元素,如果它们的顺序不符合要求就把它们交换*每趟只能确定一个数归位*冒泡算法的时间复杂度为O(N*N),除了名字有点儿意思外,确实效率不高*/voidBubbleSort(intarray[],intlength){ inttmp; for(i=0;i<length-1;i++) { for(j=0;j<length-i-1;j++)//这里是冒泡的核心,手动画图一目了然 { if(array[j]>array[j+1])//调整大于号,小于号即可调整从大到小,从小到大的顺序 { tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp; } } }} ...
[算法天天练]桶排序
【问题】:如果有一组数据a[]={0,9,2,3,4,5,3,5,2,8},对它进行从小到大的顺序排列 #include<stdio.h>voidBucketSort(){inti,j;inta[]={0,9,2,3,4,5,3,5,2,8};intb[10]={0};intiaSize=sizeof(a)/sizeof(int);intibSize=sizeof(b)/sizeof(int);for(i=0;i<iaSize;i++){b[a[i]]++;}for(i=0;i<iaSize;i++){for(j=0;j<b[i];j++){printf("%d",i);}}printf("");}intmain(){BucketSort();} 说一下复杂度的问题,桶排的复杂度O(m+n),其中m表示桶的个数,n表示待排序数的个数,即表示为O(M+N)....
[算法天天练]关于单链表的操作有环无环判断
#include<stdio.h>#include<stdlib.h>//有环链表的各种函数测试typedefstructNode{intdata;structNode*next;}Node;typedefstructNode*LinkList;/*链表初始化*/intInitList(LinkList*L){*L=(LinkList)malloc(sizeof(Node));if(!(*L))return-1;(*L)->next=NULL;return0;}/*求链表的长度*/intListLength(LinkListL){inti=0;LinkListp=L->next;while(p){i++;p=p->next;}returni;}intCreateListHead(LinkList*L,intn){LinkListp;inti;for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(Node));p->data=i+1;p->next=(*L)->next;(*L)->n...
[算法天天练]
双向链表是比较常见的,主要是在链表的基础上添加prev指针,闲话少说直接上代码吧(这个也是网上一个大神的思路,真心不错,条理清楚,逻辑缜密)主要也是为了学习,贴上我所调试成功的代码(Linux环境下)双向链表代码:1#include<stdio.h>2#include<stdlib.h>34typedefstructNodeTagNode;5typedefstructLinkedListTagLinkedList;67structNodeTag8{9Node*prev;10Node*next;11void*data;12};1314structLinkedListTag15{16Node*head;17Node*tail;18Node*cur;19intsize;20};2122//创建一个链表成功返回该链表的指针否则返回NULL23LinkedList*Create(void)24{25//创建一个新节点26LinkedList*list=(LinkedList*)malloc(sizeof(LinkedList));27//创建不成功,返回NULL28if(...
最短路径之Floyd算法
Floyd算法又称弗洛伊德算法,也叫做Floyd'salgorithm,Roy–Warshallalgorithm,Roy–Floydalgorithm, WFIalgorithm。Floyd算法是一种在有权图中(有确定的非负的权值,不能存在环路)查找最短路径的算法。该算法的一次简单执行可以找出任意结点之间的最短路径(尽管它没有返回路径的具体信息)。思想:Floyd算法通过比较图中任意两点间所有可能存在的路径长度得到最短路径长度。我们定义一个函数shortestPath(i,j,k)代表从结点i到结点j的最短路径且路径上所有结点的编号均小于k。两结点间最短路径只有两种情况:1、从结点i经过若干编号小于k的结点到达结点j;2、从结点i经过若干编号小于k+1的结点到达结点j。其中若最短路径为第二种情况,则此事路径可以分割为两段:从结点i到结点k+1和从结点k+1到结点j,其中从结点i到结点k+1为最短路径,从结点k+1到结点j也为最短路径。我们定义w(i,j)为结点i到结点j的边的距离,如果两结点之间没有变则w(i,j)为无穷大。那么以下等式shortPa...
Detectron系统实现了最先进的物体检测算法https://github.com/facebookresearch/Detectron
,包括MaskR-CNN。它是用Python编写的,支持Caffe2深度学习框架。 不久前,FAIR才开源了语音识别的工具wav2letter,戳这里看大数据文摘介绍《快讯|Facebook开源语音识别工具包wav2letter》。这一系列工具的开源,将使更多研究人员能使用到Facebook的平台,进一步扩大Facebook人工智能实验室的影响力。针对Detectron的开源,研究员RossGirshick发表了一篇博客,具体介绍了该开源平台的性能。 Detectron项目于2016年7月启动,旨在创建一个基于Caffe2的快速、灵活的物体检测系统。经过一年半的发展,Detectron的代码库已趋于成熟,并支持了很多内部项目,比如:MaskR-CNN和FocalLossforDenseObjectDetection(ICCV2017-Marr奖项和最佳学生论文获奖项目)。 Detectron支持的算法为计算机视觉关键任务(比如实例分割)提供了直观的模型,并在近年来社会上取得的视觉感知系统的巨大成果中发挥了关键作用。除了研究,Facebook许多...
搜索引擎算法研究专题六:HITS算法
2017年12月19日 ⁄ 搜索技术 ⁄共1240字⁄字号 小 中 大 ⁄ 评论关闭 HITS(Hyperlink-InducedTopicSearch)是由Kleinberg在90年代末提出的基于链接分析的网页排名算法。该算法与查询相关。 用HITS算法评估网页质量,可得到内容权威度(Authority)和链接权威度(Hub)。内容权威度与网页自身直接提供内容信息的质量相关,网页被引用得越多,其内容权威度越高;而链接权威度与网页提供的超链接的质量相关,引用内容质量高的网页越多,网页的链接权威度越高。 一个好中心网页应该指向很多权威性网页,而一个好的权威性网页则应该被很多好的中心性网页所指向。对整个Web集合而言,Authority和Hub是相互依赖、相互加强、相互优化的关系,这是HITS算法的基础。 HITS算法的施行是“迭代—收敛”的过程,即网页A链接权威度的数值是通过其链向的网页的内容权威度决定的,而网...
搜索引擎算法研究专题五:TF-IDF详解
2017年12月19日 ⁄ 搜索技术 ⁄共1396字⁄字号 小 中 大 ⁄ 评论关闭 TF-IDF(termfrequency–inversedocumentfrequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随著它在文件中出现的次数成正比增加,但同时会随著它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF*IDF,TF词频(TermFrequency),IDF反文档频...
搜索引擎算法研究专题七:Hilltop算法
2017年12月19日 ⁄ 搜索技术 ⁄共1256字⁄字号 小 中 大 ⁄ 评论关闭 HillTop也是搜索引擎结果排序的专利,是Google工程师Bharat在2001年发明的。Google的排序规则经常在变化,但变化最大的一次也就是2003年的基于HillTop算法的优化。 HillTop算法的指导思想和PageRank的一致,都通过网页被链接的数量和质量来确定搜索结果的排序权重。但HillTop认为只计算来自具有相同主题的相关文档链接对于搜索者的价值会更大:即主题相关网页之间的链接对于权重计算的贡献比主题不相关的链接价值要更高。Bharat称这种对主题有影响的文档为“专家”文档,从这些专家文档页面到目标文档的链接决定被链接网页的权重值。 Hilltop算法定义一个网站与其它网站的相关性,作为识别跨站点的链接交换干扰与识别相似链接的技术,以杜绝那些想通过任意链接来扰乱排名规则、那些想通过增加无效链接来提高网页PageR...
搜索引擎算法研究专题四:随机冲浪模型介绍
2017年12月19日 ⁄ 搜索技术 ⁄共2490字⁄字号 小 中 大 ⁄ 评论关闭 Google的LawrencePage和SergeyBrin为PageRank(PR)算法给出了一个非常简单直观的解释。他们将PageRank视作一种模型,就是用户不关心网页内容而随机点击链接。 网页的PageRank值决定了随机访问到这个页面的概率。用户点击页面内的链接的概率,完全由页面上链接数量的多少决定的,这也是上面PR(Ti)/C(Ti)的原因。 因此,一个页面通过随机冲浪到达的概率就是链入它的别的页面上的链接的被点击概率的和。并且,阻尼系数d减低了这个概率。阻尼系数d的引入,是因为用户不可能无限的点击链接,常常因无聊而随机跳入另一个页面。 阻尼系数d定义为用户不断随机点击链接的概率,所以,它取决于点击的次数,被设定为0-1之间。d的值越高,继续点击链接的概率就越大。因此,用户停止点击并随机冲浪至另一页面的概率在式子中用常数(1-d)表示。无论入站链接...
搜索引擎算法研究专题三:聚集索引与非聚集索引介绍
聚集索引介绍 在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。 如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引有更快的数据访问速度。 聚集索引通常可加快UPDATE和DELETE操作的速度,因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。 可考虑将聚集索引用于: 1.包含数量有限的唯一值的列,如state列只包含50个唯一的州代码。 2.使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、<和<=。 3.返回大结果集的查询。 创建聚集索引 在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择"索引/键"命令。 -或- 为要创建索引的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"索引/键"命令。 创建新索引。有关详细信息,请参见创建索引。 若要修改现有索引,请从"选定的索引"列表中选择该索引。 选择"创建为CLUSTERED"复选框。 当保存表或关系图时,索引即...
大数据等最核心的关键技术:32个算法
大数据等最核心的关键技术:32个算法转载2016年12月11日22:24:05A*搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,BeamSearch)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。二分查找(BinarySearch)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。分支界定算法(BranchandBound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。...
谷歌做了45万次不同类型的文本分类后,总结出一个通用的“模型选择算法”...
2018年07月25日17:43:55阅读数:6新智元报道 来源:developers.google.com 编译:肖琴、大明 【导读】谷歌官方推出“文本分类”指南教程。为了最大限度地简化选择文本分类模型的过程,谷歌在进行大约450K的文本分类实验后,总结出一个通用的“模型选择算法”,并附上一个完整的流程图,非常实用。 文本分类(Textclassification)算法是大规模处理文本数据的各种软件系统的核心。比如,电子邮件软件使用文本分类来确定受到的邮件是发送到收件箱还是过滤到垃圾邮件文件夹;讨论论坛使用文本分类来确定用户评论是否应该标记为不当。 下面是两个主题分类(topicclassification)的例子,任务是将文本文档归类为预定义的一组主题。多数主题分类问题要基于文本中的关键字。 主题分类被用于标记收到的垃圾邮件,这些邮件被过滤到垃圾邮件文件夹中 另一种常见的文本分类是情感分析(sentimentanalysis),其...