算法

归并排序算法(C语言)

情到浓时终转凉″ 提交于 2020-02-28 00:00:51
下面是实现代码 # include <stdio.h> # include <string.h> # include <stdlib.h> void Merge ( int stu [ ] , int s , int m , int n ) { //归并排序--归并 int i , j , k ; int temp [ 100 ] ; i = s ; j = m + 1 ; k = 0 ; while ( i <= m && j <= n ) { if ( stu [ i ] < stu [ j ] ) temp [ k ++ ] = stu [ i ++ ] ; else temp [ k ++ ] = stu [ j ++ ] ; } while ( i <= m ) temp [ k ++ ] = stu [ i ++ ] ; while ( j <= n ) temp [ k ++ ] = stu [ j ++ ] ; for ( i = s ; i <= n ; i ++ ) { stu [ i ] = temp [ i - s ] ; } } void MergeSort ( int stu [ ] , int low , int high ) { //归并排序--二分 int mid ; if ( low < high ) { mid = ( low + high )

MD5加密算法

瘦欲@ 提交于 2020-02-27 20:17:28
转载: https://blog.csdn.net/mp624183768/article/details/80575843 全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 MD5消息摘要算法,属Hash算法一类。MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要。 以下所描述的消息长度、填充数据都以位(Bit)为单位,字节序为小端字节。 1.特点 (1)长度固定: 不管多长的字符串,加密后长度都是一样长 作用:方便平时信息的统计和管理 (2)易计算: 字符串和文件加密的过程是容易的. 作用: 开发者很容易理解和做出加密工具 (3)细微性: 一个文件,不管多大,小到几k,大到几G,你只要改变里面某个字符,那么都会导致MD5值改变. 作用:很多软件和应用在网站提供下载资源,其中包含了对文件的MD5码,用户下载后只需要用工具测一下下载好的文件,通过对比就知道该文件是否有过更改变动. (4)不可逆性: 你明明知道密文和加密方式,你却无法反向计算出原密码. 作用:大大提高了数据的安全性 2.撞库破解 这是概率极低的破解方法,原理就是: (1)建立一个大型的数据库,把日常的各个语句,通过MD5加密成为密文,不断的积累大量的句子,放在一个庞大的数据库里. (2)比如一个人拿到了别人的密文,想去查询真实的密码

KMP模式匹配算法

↘锁芯ラ 提交于 2020-02-27 20:07:01
title: KMP模式匹配算法 date: 2020-02-26 17:24:29 tags: datastructure 这几天复习到数据结构的串的模式匹配,看到KMP算法那么寥寥几行的代码,原本觉得这部分内容很简单,直到我开始尝试去理解它,我才发现我跟大佬的差别。 KMP算法的基本思路 KMP算法,是名分别为K、M、P的三个美国大佬发明的,算是对传统的朴素模式匹配算法的改进。我们先规定,讨论模式串下标均从1开始。朴素模式匹配算法就不谈了,这个有脑子就能想出来,但朴素模式匹配算法存在一个弊端——当模式串有较多重复元素存在时,主串指针i其实做了很多没有必要的回溯。 而如果想跳过这些没有必要比较的情况,那么就可以想到,主串指针是没有必要回退的,因为当发生与模式串失配的情况时,可以确定的是,此前成功匹配的若干元素形成的字串,其实就是模式串的一个真字串,那么对于这样的一个字串,它的头部和尾部如果发生了重复,就只需要往回移动模式串指针就好了,但是又不需要往回移到初始位置,因为我们看到他的头部和尾部发生了重复,又由于这个头部重复的部分与现在主串指针前的那个模式串真字串重复,而这部分就是真字串的尾部,所以最有利的做法应该是将模式串指针移动至头部重复字串的后一位,再来与当前的主串指针比较。这样,就避免了主串的回溯,单就这个算法本身,简单来看时间复杂度应该是o(n)。 以下是KMP主代码

人工智能之口罩检测算法

白昼怎懂夜的黑 提交于 2020-02-27 19:55:51
由于疫情的影响,口罩检测已经成为各个程序员竞相开发的一种算法。 百度的人脸检测SDK使用的还不错,他们还把口罩检测也给开源了 我这里使用基于OPENCV的检测 一般的思路可能就是手机带有口罩和没有戴口罩的数据集进行训练,但是我暂时没有找到这些数据集,我就采用使用opencv原来带有的训练集先检测出人脸,然后再对人脸检测鼻子和嘴巴。但是由于opencv的检测鼻子和嘴巴的算法准确性不高,需要经过附加条件检测是不是真正的嘴巴和鼻子,如果在人脸中检测出了嘴巴和鼻子的话,那么没有戴口罩puttext no mask,否则就进行人脸识别 那么要进行人脸识别的话,需要采集本人的数据,然后在获取ORL的数据集一同训练。我这里获取了ORL提供的40个样本,每个样本里面有10个bmp格式的图像。 现在我们开始获取数据集,思路很简单,就是打开摄像头,对每一帧图像进行处理。对这每一帧图像识别出人脸,如果人脸的size为1,那么表示这就是你的人脸,然后把处理后的人脸保存起来。 为了拍摄多角度图像,需要每处理一次都需要等待,设置一个计数器,当经过十次的拍摄后,就退出程序 int makepicture ( ) { CascadeClassifier cascada ; cascada . load ( "E:/OPENCV/opencv/sources/data/haarcascades

排序算法三:插入排序

孤者浪人 提交于 2020-02-27 19:28:15
//把每个值,插入到适合他的位置。插入的方法是:它前面的值往后移动。这个算法需要下标为0的位置作为哨兵#include <stdio.h> void InsertSort(int *L) { int i, j; for (i = 2; i < 11; i++) { if (L[i] < L[i - 1]) { L[0] = L[i]; for (j = i - 1; L[j] > L[0]; j--) { L[j + 1] = L[j]; } L[j + 1] = L[0]; //因为循环最后的j--了 } } } int main() { int L[11] = { -1,3,2,5,6,8,1,9,4,7,0 }; int i = 1; for (; i <= 10; i++) { printf("%d ", L[i]); } printf("\n"); InsertSort(L); for (i = 1; i <= 10; i++) { printf("%d ", L[i]); } printf("\n"); return 0; }    来源: https://www.cnblogs.com/miracle2015126/p/6118914.html

图论——最短路径问题

廉价感情. 提交于 2020-02-27 15:57:41
之前自己看过和总结过相关的东西,今天再总结说一下; 感觉权值问题,是否无向有向,权值正负可以直接用不同的算法进行解决; 这次还是主要说一说四种算法:迪杰斯特拉算法、BF算法、SPFA算法、弗洛伊德算法; 迪杰斯特拉算法: 老生常谈最简单的一种算法,从某一点出发,建立Distance数组,不断地寻找当前最近节点,并且选择该节点后,以该节点作为中介,更行其他的全不distance长度; 个人认为适合单源到多点的路径问题; 之前做的总结 https://blog.csdn.net/InNoVaion_yu/article/details/86629313 但是仍然需要注意的是该算法的衍生问题:多路径问题; 对于多路径问题往往加限定条件; 不加任何条件的整体代码: #include<stdlib.h> #include<stdio.h> #include<algorithm> #include<string> #include<iostream> #include<vector> using namespace std; using std::vector; const int MAXV=1000; const int INF=1000000000; struct Node{ int v,dis; }; vector<Node>Adj[MAXV];//图的存储 int d[MAXV];/

数据结构与算法系列一(开篇)

别说谁变了你拦得住时间么 提交于 2020-02-27 09:26:40
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 #考考你: 1.你能用自己的话给数据结构下定义吗? 2

算法之排序(上)-c语言实现

旧街凉风 提交于 2020-02-27 09:23:56
文章来源: http://blog.seclibs.com/算法之排序(上)-c语言实现/ 在上一篇文章中,我们说了时间复杂度为 O(n2)的几个排序算法,冒泡排序、插入排序、选择排序,在理解上和实现上都没有太难的地方,这里在实现的时候,没有再自己实现数组或链表,而是使用了c语言自带的数组进行实现的,代码中没有太难理解的地方,就直接上代码了 如果需要下载代码,请移步文末 代码: GitHub 文章首发公众号和个人博客 公众号:无心的梦呓(wuxinmengyi) 博客: http://blog.seclibs.com/ 来源: oschina 链接: https://my.oschina.net/u/3677719/blog/3163271

文献搜索算法

混江龙づ霸主 提交于 2020-02-27 09:05:17
搜索算法是利用计算机的强大计算能力来有目的的穷举一个问题的解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在具体的实现中往往是一段计算机代码,用来在大型的数据库中查找具有特定属性的项目。 搜索算法有不同的类型,比如线性搜索或者枚举法会按顺序进行查找,直到找到相关项。而二进制搜索比较适合搜索通过数字标记的关键字,比如驾照和身份证。数搜索树模型则是根据初始条件和规则来构造一个解答树来寻找目标节点。遗传算法等启发式的搜索则是通过多次迭代,丢弃掉那些坏的结果而直到留下最佳的结果。 更多时候,搜索算法对于用户是不可见的。使用者只需要提供搜索用的关键字,就可以得到最后的结果,而不需要知道结果是怎么得到的。比如最强大的google搜索,它通过检索巨大的数据库,在几秒钟内提供数以百万计的搜索结果。在学术界,大约有1.1亿份文件是存储在互联网的,普通用户是没有办法一一查看这些文件是否与自己相关的,谷歌学术搜索可以帮助过滤一部分没有用的信息。但批评家仍然不满足,他们觉得谷歌学术搜索的缺陷是无法将没有经过同行评审的文章和经过同行审查的文章进行区分对待。 在现在科研过程中,我们阅读到的文献除了其他文章的参考文献之外,其他的基本上都是来自大型数据库提供的搜索功能。在某种程度上可以说,我们对科研方向的认识程度是依赖于搜索引擎的准确性的。搜索引擎对我们来说可以是成也萧何,败也萧何

动手学C语言--S1绪论篇

寵の児 提交于 2020-02-27 08:35:36
第一章:计算机程序设计与算法实现 计算思维能力培养 程序设计算法结构与组成 Visual C++ 集成工具 计算机程序算法表示 加法法则 程序流程图的描述 N-S图 程序设计语言描述 高级语言(这才是实打实的) 程序算法案列实现 计算思维能力培养 C语言:是面向过程的 C++:面向对象,也可以实现面向过程 JAVA:跨平台分布式语言 VB:交互逻辑思维 Python:主要是面向对象进行问题求解的编程语言;其语法简洁清晰,类库丰富强大,更是能轻松结合其他语言:尤其是:C语言,C++语言; 程序设计过程 计算机解决问题的过程就是将其转化为计算机思维化的过程; 程序设计算法结构与组成 计算机程序组织结构: 程序 = 数据结构+程序算法 数据结构:是对程序操作对象的数据类型及数据组织形式的描述与定义; 在程序中:是对内存变量及存储数据计算范围的定义和约定; 程序算法: 是对程序操作过程,即操作步骤的算法描述的指令集合; 在程序中,是对操作对象和程序流程的逻辑控制,是实际问题求解的实现过程; 但是,对当下来说: 程序=数据结构+数据结构+设计方法+编程语言+编程工具 对于常量:用全部大写表示----提高代码可读性; 例1实现计算圆柱体计算体积 代码实现: Visual C++ 集成工具 文件管理和文件名命名规则 创建text 然后保存成 .c文件; 运行,调试工具:从快捷键按钮出发;