算法

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

我的未来我决定 提交于 2020-02-26 11:36:42
文章来源: http://blog.seclibs.com/算法之排序中-c语言实现/ 上一篇文章里说了归并排序和快速排序,它们的代码实现是非常相似的,只要理解了其中的具体实现,还是比较容易写出代码的。 归并排序 代码如下,需要下载代码的请移步至文末 快速排序 代码如下,需要下载代码的请移步至文末 代码: 归并排序: GitHub 快速排序: GitHub 文章首发公众号和个人博客 公众号:无心的梦呓(wuxinmengyi) 博客: http://blog.seclibs.com/ 来源: oschina 链接: https://my.oschina.net/u/3677719/blog/3163548

算法 PAT真题 Pop Sequence 分析思路以及实现 2

烂漫一生 提交于 2020-02-26 10:33:01
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stack> using namespace std; //5 7 5 1 2 3 4 5 6 7 3 2 1 7 5 6 4 7 6 5 4 3 2 1 5 6 4 3 7 2 1 1 7 6 5 4 3 2 stack<int>s; int main() { int* a; int m, n, k; scanf("%d%d%d", &m, &n, &k);// != EOF) a = (int*)malloc((n + 1) * sizeof(int)); a[0] = 0; for (;k > 0;k--){ while (!s.empty())s.pop(); for (int i = 0;i < n;i++)scanf("%d", &a[i]); int i = 0,j = 0; while (i < n) { while ((s.empty() || s.top() != a[i]) && j < n&&s.size() < m) { s.push(j + 1); j++; } if (s.top() == a[i]) { s.pop(); i++; } else break; } if (s.empty())printf("YES\n"); else

算法之二分查找(上)

送分小仙女□ 提交于 2020-02-26 09:44:29
文章来源: http://blog.seclibs.com/算法之二分查找上/ 二分查找在平时的生活中也挺常用的,比如说以前玩的猜数游戏,每次都取中间数,然后得知是大了,还是小了,这个例子也就是二分查找。 比如下面的这个例子,要查找有没有数值19,其中low和high是查找的区间的下标,mid是查找区域的中间值的下标。 二分查找的思想是比较容易理解的,而且它的时间复杂度也是比较低的。假设数据大小为n,每次查找完后都会缩小一半,即为除以2,最坏的情况也就是一直到查找空间为空的时候,所以它们的变化为n,n/2,n/4,n/8,…,n/2k,当n/2k=1时,k即为缩小的次数,因为每次都只涉及到两个数的大小比较,所以k次操作的时间复杂度为O(k),又因为n/2k=1,所以k=log2n,时间复杂度也就是O(logn),这是一个非常恐怖的数量级了,比如n为2的32次方,大约是四十多亿,用二分查找来查找里面的一个数的话,最多比较32次也就可以得到这个值了,这是一个非常恐怖的情况。 上面的原理已经很明确了,所以二分查找的实现并不是很复杂,但是有一个前提条件,有序数组中不存在重复元素,只有在这个情况下,二分查找的实现才是相对简单的,具体的实现在下一篇文章里提及。 虽然二分查找时间复杂度低,查找起来非常高效,但它也有一定的适用条件的。 首先,二分查找是依赖于数组的,如果使用其他的数据结构来实现的话

聚类算法学习

本小妞迷上赌 提交于 2020-02-26 09:44:28
聚类是一种非监督学习方法 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正 样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签,我们需要据此拟合一 个假设函数。与此不同的是,在非监督学习中,我们的数据没有附带任何标签,我们拿到的 数据就是这样的: 在这里我们有一系列点,却没有标签。因此,我们的训练集可以写成只有 x(1),x(2)…..一直 到 x(m)。我们没有任何标签 y。因此,图上画的这些点没有标签信息。也就是说,在非监督 学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,然后我们告诉这个算法, 快去为我们找找这个数据的内在结构给定数据。我们可能需要某种算法帮助我们寻找一种结 构。图上的数据看起来可以分成两个分开的点集(称为簇),一个能够找到我圈出的这些点集的算法,就被称为聚类算法。 K-均值算法 K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的 组。 K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为: 首先选择 K 个随机的点,称为聚类中心(cluster centroids); 对于数据集中的每一个数据,按照距离 K 个中心点的距离,将其与距离最近的中心点关 联起来,与同一个中心点关联的所有点聚成一类。 计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。 重复步骤

二分查找算法

大城市里の小女人 提交于 2020-02-26 09:02:27
==================================================================================================== 总结: 来源: https://www.cnblogs.com/curedfisher/p/12365032.html

五分钟自学编程:怎样才能学好笔试面试最爱考察的算法

醉酒当歌 提交于 2020-02-26 07:34:42
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 什么是算法 上回我们有一篇文章,讲述了作为一个新人程序员,如何学习数据结构这门课程,其实呢,数据结构和算法是息息相关的,为什么这么说呢,因为数据结构本身只是一个载体,而在数据结构之上产生作用和输出价值的东西其实是算法。 比如数据结构里的数组,看似非常简单的数据结构,却可以支持很多复杂的算法,比如动态规划,比如DFS和BFS,再比如字符串算法、二叉树算法等等。那么算法到底是什么东西呢,不妨让我们来看看官方的介绍。 根据百度百科的介绍,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 其实,算法的本质就是给你一组输入,运算之后给你一组输出,因此,算法帮人们解决很多问题把抽象的问题具体化,把一个问题转化成另外一个问题。 认识算法的N个阶段 我第一次遇到算法题,还是在我考研复习数据结构的时候,那个时候我看到的算法题其实都是很基础的题目,比如把数组中的两个元素置换,把两个链表合并成一个,但对于我来说已经是很有难度的事情了,那时候我连伪代码是什么都还不懂。 第二次认识算法,还是在研究生期间找实习工作的时候

达观招聘丨听说你想来做人工智能了

落花浮王杯 提交于 2020-02-26 05:30:13
达观数据招人啦! 面向 北京 、 上海 、 深圳 、 成都 四个地区 提供 人工智能 、 算法 、 产品 、 销售 等多类岗位 毕业多年, 你的状态还好吗? 是否忧虑被甩在时代的边缘? 是否担心 被机器取代? 是否不安现状、跃跃欲试? 来吧, 选择对的行业,与优秀的人一起共事, 与我们一起走在 时代的风口 上, 从事当下最有前景的 人工智能 行业 深耕 机器学习 、 数据挖掘 、 自然语言处理技术 达观数据 在这等你 招聘岗位 1、大客户销售经理 (上海/深圳/北京/成都) 1.面向大型企业级客户,独立操作NLP、人工智能算法相关项目和产品的销售全流程,通过顾问式销售, 呈现达观产品和服务的价值; 2.根据公司市场战略开拓客户,寻找销售机会,进行需求引导与沟通,推动销售项目的实施、产品应用的落地; 3.达成销售业绩,完成月度、季度和年度销售指标; 4.善于进行销售各个阶段的精细化管理,对项目进行有效推进; 5.及时收集客户的反馈,竞争对手的市场动态,协助公司制定对应市场策略。 岗位要求: 1.本科及以上学历; 2.3年以上销售经验,有IT咨询/B2B软件/大数据/人工智能类大型项目或产品的销售经验, 在传统企业、金融机构、科技制造业、运营商、法律、政府等至少一个垂直行业有积累; 3.具备良好产品演示、销售技巧、谈判能力和内外部资源协调能力,执行力强; 4

如何设计一个安全的对外接口?

南楼画角 提交于 2020-02-26 04:52:46
前言 最近有个项目需要对外提供一个接口,提供公网域名进行访问,而且接口和交易订单有关,所以安全性很重要;这里整理了一下常用的一些安全措施以及具体如何去实现。 安全措施 个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。 1.数据加密 我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密;现在主流的做法是使用https协议,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密; 2.数据加签 数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过程中不被篡改;你可能会问数据如果已经通过https加密了,还有必要进行加签吗?数据在传输过程中经过加密,理论上就算被抓包,也无法对数据进行篡改;但是我们要知道加密的部分其实只是在外网,现在很多服务在内网中都需要经过很多服务跳转,所以这里的加签可以防止内网中数据被篡改; 3.时间戳机制 数据是很容易被抓包的,但是经过如上的加密,加签处理,就算拿到数据也不能看到真实的数据;但是有不法者不关心真实的数据,而是直接拿到抓取的数据包进行恶意请求

加密算法极先锋之MD5算法

爱⌒轻易说出口 提交于 2020-02-26 04:49:05
在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,作为拿来主义的开发者时间精力有限,能够清楚其中主流的加密算法和用途,就已经足够了。 主要的数据加密算法主要有:md5、sha、aes、des、rsa、base64等等。 先来看看我们的老熟人:md5算法,几乎在任何一个系统中,都少不了他的身影。MD5算法全称叫 Message Digest Algorithm 5(信息摘要算法5),是数字摘要算法的一种实现,摘要长度为128位。由于其算法的复杂性和不可逆性,主要用于确保信息传输完整性和一致性。他还有早期的“不太争气”的几代MD2、MD3、MD4(早期的几代就是由于复杂度不够被破解了)。正是由于MD5算法有如此特性,在业界应用非常广泛,主流的编程语言都自带有MD5的实现。 最常见的,很多系统中的用户密码都采用了MD5加密算法进行加密。但是树大必然招风,就像windows系统应用广泛了,安全性就收到了挑战,MD5也不例外。度娘一下就会发现,有诸多网站提供MD5破解,有的甚至需要收费提供破解服务。 不过不用担心,目前能破解MD5并还原出原始数据的成功率很低(当然像123456这种弱智的原文,就不要提了,其他的破解可以自行度娘试试)。这就需要提到现行MD5算法的主要破解思路,其实核心只有一个,那就是暴力碰撞(其他还有两种 字典法