为您找到搜索结果:1674个
排列组合算法
排列:从n个不同元素中,任取m(m<=n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m)表示。A(n,m)=n(n-1)(n-2)……(n-m+1)=n!/(n-m)!此外规定0!=1 组合:从n个不同元素中,任取m(m<=n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m<=n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号C(n,m)表示。C(n,m)=A(n,m)/m!=n!/((n-m)!*m!); C(n,m)=C(n,n-m)。C语言使用标志位实现#include<iostream>usingnamespacestd;#defineMaxN10charused[MaxN];intp[MaxN];chars[MaxN];//从n个元素中选r个进行排列voidperm...
什么是Kmp算法?
2.暴力匹配算法 假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? 如果用暴力匹配的思路,并假设现在文本串S匹配到i位置,模式串P匹配到j位置,则有:如果当前字符匹配成功(即S[i]==P[j]),则i++,j++,继续匹配下一个字符;如果失配(即S[i]!=P[j]),令i=i-(j-1),j=0。相当于每次匹配失败时,i回溯,j被置为0。 理清楚了暴力匹配算法的流程及内在的逻辑,咱们可以写出暴力匹配的代码,如下:[cpp] viewplain copy print?int ViolentMatch(char* s, char* p) { int sLen = strlen(s); int ...
大数据学习——mapreduce案例join算法
需求:用mapreduce实现selectorder.orderid,order.pdtid,pdts.pdt_name,oder.amountfromorderjoinpdtsonorder.pdtid=pdts.pdtid 数据:orders.txtOrder_0000001,pd001,222.8Order_0000001,pd005,25.8Order_0000002,pd005,325.8Order_0000002,pd003,522.8Order_0000002,pd004,122.4Order_0000003,pd001,222.8Order_0000003,pd001,322.8pdts.txtpd001,applepd002,bananapd003,orangepd004,xiaomipd005,meizu pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www...
数据结构与算法笔记(一)
1...
【软考】——排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。排序包括两大类:内部排序和外部排序内部排序:待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列,即元素个数少的排序中外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的【是什么】:是一种简单的排序方法,基本思想是依次将记录插入到一个已排好序的有序表中,从而得到一个新的、记录数增加1的有序表例子:图书馆整理图书【怎么用】 【In aword】将需要排序的数依次和已有表中的数据进行比较,按照从小到大的顺序插入到已有的表中【是什么】 第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小...
[第8章]算法设计技术——一维模式识别
第八章主要介绍了一维模式识别的算法改进过程。问题输入:n个浮点数的向量x。问题输出:任何连续子向量中的最大和。(1)首先从最直观的做法入手,就是枚举所有情况下的子向量的和,最后比较出最大的和。首先,利用两层for循环,列出了所有可能的子向量,在用一层for循环,求出子向量的和。运算时间为O(n^3)。intMaxNum1(int*a,int_len){intmaxNum=0;for(inti=0;i<_len;i++){for(intj=i;j<_len;j++){inttNum=0;for(intk=i;k<=j;k++){tNum+=a[k];}maxNum=maxNum>tNum?maxNum:tNum;}}returnmaxNum;} 接下来,作者开始引导我们对算法本身进行分析,去仔细观察,哪些地方是没必要的,可以进行优化。这个时候的一个思路就是,避免重复运算。根据这个思路,我们观察最内层循环,可以发现,每次都要重新计算求子向量的和,下一个子向量的和其实只需要在前一个子向量的和的基础上再加一项即可。这时候,就引出了方案2。 (2)首先求出从首...
基本排序算法程序实现
简单算法O(n^2):冒泡法<简单选择排序<直接插入排序(性能比较)改进算法:希尔排序、堆排序、归并排序、快速排序 数组交换语句swap()1voidswap(int*sortList,intintA,intintB)2{3inta=sortList[intA];4sortList[intA]=sortList[intB];5sortList[intB]=a;6} 冒泡法(改进)voidBubbleSort(int*sortList,intlen){boolisOrder=false;//哨兵for(inti=0;(i<len-1)&&!isOrder;i++){isOrder=true;for(intj=len-1;j>=i;j--){if(sortList[j]<sortList[j-1]){swap(sortList,j,j-1);isOrder=false;}}}} 简单选择排序voidSimpleSort(int*sortList,intlen){intminIndex;for(inti=0;i<...
多目标跟踪之数据关联(匈牙利匹配算法和KM算法)
ref:https://zhuanlan.zhihu.com/p/110590953https://www.zhihu.com/search?type=content&q=%E5%8C%88%E7%89%99%E5%88%A9%E5%8C%B9%E9%85%8D%20%E8%B7%9F%E8%B8%AA%E5%85%B3%E8%81%94首先要明确概念:数据关联是多目标跟踪任务中的关键步骤,其目的主要是:为了进行帧与帧之间多个目标的匹配,其中包括新目标的出现,旧目标的消失,以及前一帧与当前帧的(行人)ID的匹配。传统的数据关联方法多为运筹学方法,比较经典的即为匈牙利匹配算法和KM算法,接下来详细介绍这两种算法。在介绍匈牙利匹配算法和KM算法之前,我们需要了解一个“二分图”的概念。简单来说就是,两组集合U和V,U和V各自内部的点不能相互连通,但是U和V之间的点可以连通,看示意图: 可以看到,二分图的结构与我们多目标跟踪任务的结构很相像,我们可以把U与V看成是多目标跟踪任务中的前一帧与当前帧的检测框集合,U与V之间的关联视为前一帧与当前帧的同一id目标的检测框...
python code practice(二):KMP算法、二分搜索的实现、哈希表
https://blog.csdn.net/starstar1992/article/details/54913261?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task关于KMP---一个很有名的字符串匹配算法,请参考上面链接学习。 1、替换空格题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。分析:将长度为1的空格替换为长度为3的“%20”,字符串的长度变长。如果允许我们开辟一个新的数组来存放替换空格后的字符串,那么这道题目就非常简单。设置两个指针分别指向新旧字符串首元素,遍历原字符串,如果碰到空格就在新字符串上填入“%20”,否则就复制元字符串上的内容。但是如果面试官要求在原先的字符串上操作,并且保证原字符串有足够长的空间来存放替换后的字符串,那么我们就得另想方法。classSolution:defreplace...
《百面机器学习》拾贝----第三章:经典算法
不忘初心,方得始终.01 支持向量机支持向量机(SupportVectorMachine,SVM)是众多监督学习方法中十分出色的一种,几乎所有讲述经典机器学习方法的教材都会介绍。关于SVM,流传着一个关于天使与魔鬼的故事。以下关于SVM的介绍很生动:传说魔鬼和天使玩了一个游戏,魔鬼在桌上放了两种颜色的球,如图3.1所示。魔鬼让天使用一根木棍将它们分开。这对天使来说,似乎太容易了。天使不假思索地一摆,便完成了任务,如图3.2所示。魔鬼又加入了更多的球。随着球的增多,似乎有的球不能再被原来的木棍正确分开,如图3.3所示。 图3.1 分球问题1 图3.2 分球问题1的简单解 图3.3 分球问题2SVM实际上是在为天使找到木棒的最佳放置位置,使得两边的球都离分隔它们的木棒足够远,如图3.4所示。依照SVM为天使选择的木棒位置,魔鬼即使按刚才的方式继续加入新球,木棒也能很好地将两类不同的球分开,如图3.5所示。 图3.4 分球问题1的优化解 ...
怎样成为一名优秀的算法工程师
感谢https://blog.csdn.net/sigai_csdn/article/details/81012167,听君一席话,胜读十年书。和一个有着多年工作经验的同行朋友交流,他说:一个优秀的算法人员培养成本其实比开发人员要高的多,周期也更长,绝对不是随便一个人都可以跨行的。怎样成为一名优秀的算法工程师?面对市场对人才的大量需求与供给的严重不足,以及高薪水的诱惑,越来越多的人开始学习这个方向的技术,或者打算向人工智能转型。市面上各种鱼龙混杂的培训班以及误导人的文章会把很多初学者带入歧途,浮躁的跟风将会让你最后收获甚微,根本达不到企业的用人要求。原作者写这篇文章正是为了更好的帮助大家学习和成长,少走弯路。这里自己重写当时学习,学习如何去学习也是至关重要的,有些时候甚至超越学习本身!首先来看一个高度相关的问题:一个优秀的算法工程师必须具备哪些素质?作者给出的答案是这样的:数学知识编程能力机器学习与深度学习的知识应用方向的知识对自己所做的问题的思考和经验除去教育背景,逻辑思维,学习能力,沟通能力等其他方面的因素,大多数公司在考察算法工程师的技术水平时都会考虑上面这几个因素。接下来按照这...
算法工程师<深度学习基础>
<深度学习基础>卷积神经网络,循环神经网络,LSTM与GRU,梯度消失与梯度爆炸,激活函数,防止过拟合的方法,dropout,batchnormalization,各类经典的网络结构,各类优化方法1、卷积神经网络工作原理的直观解释https://www.zhihu.com/question/39022858简单来说,在一定意义上,训练CNN就是在训练每一个卷积层的滤波器。让这些滤波器组对特定的模式有高的激活能力,以达到CNN网络的分类/检测等目的。2、卷积神经网络的复杂度分析https://zhuanlan.zhihu.com/p/315750743、CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?https://www.zhihu.com/question/346811684、BP算法中为什么会产生梯度消失?https://www.zhihu.com/question/498120135、梯度下降法是万能的模型训练算法吗?https://www.zhihu.com/question/386773546、LSTM如何来避免梯度...
算法工程师<机器学习基础>
<机器学习基础>逻辑回归,SVM,决策树1、逻辑回归和SVM的区别是什么?各适用于解决什么问题?https://www.zhihu.com/question/249044222、LinearSVM和线性回归有什么异同?答案:https://www.zhihu.com/question/26768865基础知识:https://blog.csdn.net/ChangHengyi/article/details/805773183、支持向量机属于神经网络范畴吗?https://www.zhihu.com/question/222900964、如何理解决策树的损失函数?https://www.zhihu.com/question/340756165、各种机器学习的应用场景分别是什么?例如,k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型。https://www.zhihu.com/question/26726794主成分分析,奇异值分解6、SVD降维体现在什么地方?https://www.zhihu.com/question/341438867、为什么PCA不被用来避免过...
算法工程师<数学题/智力题>
<数学题/智力题>1、如果一个女生说,她集齐了十二个星座的前男友,我们应该如何估计她前男友的数量?https://blog.csdn.net/FnqTyr45/article/details/802489272、如何理解矩阵的秩?https://www.zhihu.com/question/216050943、矩阵低秩的意义?https://www.zhihu.com/question/286306284、如何理解矩阵特征值?https://www.zhihu.com/question/21874816特别有意思,如果我大学时候老师这么讲数学,别提多喜欢。5、为什么梯度反方向是函数值局部下降最快的方向?https://zhuanlan.zhihu.com/p/24913912...
算法工程师<编程题>
<编程题>1、[MaximumProductSubarray求最大子数组乘积]这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的时候,遇到0,不会改变最大值,遇到负数,也只是会减小最大值而已。而在求最大子数组乘积的问题中,遇到0会使整个乘积为0,而遇到负数,则会使最大乘积变成最小乘积,正因为有负数和0的存在,使问题变得复杂了不少。比如,我们现在有一个数组[2,3,-2,4],我们可以很容易的找出所有的连续子数组,[2],[3],[-2],[4],[2,3],[3,-2],[-2,4],[2,3,-2],[3,-2,4],[2,3,-2,4],然后可以很轻松的算出最大的子数组乘积为6,来自子数组[2,3].那么我们如何写代码来实现自动找出最大子数组乘积呢,我最先想到的方比较简单粗暴,就是找出所有的子数组,然后算出每一个子数组的乘积,然后比较找出最大的一个,需要两个for循环,第一个for遍历整个数组,第二个for遍历含有当前数字的子数组,就是按以下顺序找出子数组:[2],[2,3],[2,3,-2],[2,3,-2,4],&n...