算法

【算法总结】#1 算法概述

巧了我就是萌 提交于 2020-02-26 23:22:23
算法   算法(algorithm)在Thomas H. Cormen书中的定义是求解良说明的计算问题的工具。这里提到的良说明就是完全符合ISO标准而不存在任何歧义的说明。 一般来说,问题陈述说明了期望的输入和输出。算法则是描述一个特定的过程来实现该输入\输出的关系。    进入例子:算法好比是菜谱,我们的输入是食材,输出则是菜肴。而这个烹饪的过程即是算法。同菜谱一样,算法就像是一种做菜的方法,不存在实体。菜谱可以有很多种,但是好吃不好吃又是另一说了。算法也是如此,好的算法,有着精简效率的特性,而差的算法有着一塌糊涂的复杂度。算法复杂度即是我们在算法领域中要讨论的重要课题。   算法解决的问题通常有如下的特性:   1、存在许多候选解,但大多数候选解都没有解决手头的问题。寻找一个真正的解或者一个最好的解可能是一个很大的挑战。(如同做出一道好菜一般)   2、存在实际运用。如求解最短路径,在实际中,找到最短路径对于一些物流和货运公司可能是很好的消息。   难题:   在学习过程中大部分时间我们讨论有效算法。我们关于效率的一般量度是速度,即一个算法花多长时间产生结果。然而一些问题,目前还不知道有效的算法。比如后续我们要讨论的NP完全问题。   为什么NP完全问题有趣呢?   第一,当前对于NP完全问题,是否存在有效算法是未知的。   第二,NP完全问题集具有一个非凡的性质

几种改进的谱减算法简介

不羁的心 提交于 2020-02-26 22:28:26
非线性谱减 Berouti等人提出的谱减算法,假设了噪声对所有的频谱分量都有同等的影响,继而只用了一个过减因子来减去对噪声的过估计。现实世界中的噪声并非如此,这意味着可以用一个频率相关的减法因子来处理不同类型的噪声。 多带谱减法 在多带算法中,将语音频谱划分为N个互不重叠的子带,谱减法在每个子带独立运行。将语音信号分为多个子带信号的过程可以通过在时域使用带通滤波器来进行,或者在频域使用适当的窗。通常会采用后一种办法,因为实现起来有更小的运算量。 多带谱减与非线性谱减的主要区别在于对过减因子的估计。多带算法针对频带估计减法因子,而非线性谱减算法针对每一个频点,导致频点上的信噪比可能有很大变化。这种剧烈变化是谱减法中所遇到的语音失真(音乐噪声)的原因之一。相反,子带信噪比变化则不会特别剧烈。 MMSE谱减算法 上面的方法中,谱减参数alpha和beta通过实验确定,无论如何都不会是最优的选择。MMSE谱减 法能够在均方意义下最优地选择谱减参数。具体请参考论文:A parametic formulation of the generalized spectral subtractor method 扩展谱减法 基于自适应维纳滤波与谱减原理的结合。维纳滤波用于估计噪声谱,然后从带噪语音信号中减去该噪声谱。 具体请参考以下两篇论文: Extended Spectral

做了几年程序员,某天居然发现自己没学过数据结构。。。

孤街浪徒 提交于 2020-02-26 21:52:17
原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 简介 学习编程,数据结构是你必须要掌握的基础知识,那么数据结构到底是什么呢? 根据百度百科的介绍,数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 听听这是人话么,我帮你们翻译一下,其实数据结构就是用来描述计算机里存储数据的一种数学模型,因为计算机里要存储很多乱七八糟的数据,所以也需要不同的数据结构来描述。 本文思维导图 为什么要学数据结构 了解了基本概念之后,接下来我们再来看看,为什么我们要学习数据结构呢? 在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。 许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。 选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。 也就是说,选定数据结构往往是解决问题的核心,比如我们做一道算法题

数据结构与算法初步认识

不羁岁月 提交于 2020-02-26 21:44:23
文章来源: http://blog.seclibs.com/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95%E5%88%9D%E6%AD%A5%E8%AE%A4%E8%AF%86-2/ 什么是数据结构和算法 数据结构和算法经常是结合在一起的东西,数据结构是数据的存储方式,而算法是对数据的具体操作,他们二者是相辅相成的,数据结构是为算法服务的,算法是要作用在特定的数据结构之上的,两者是不可以孤立存在的。 在平时我们所遇到的数据结构和算法有以下一些 整个列表的内容下来还是非常多的,这里不立什么flag,只是为了给之后所学习的内容做一个更好的铺垫。 数据结构和算法的应用就是为了解决程序的快和省的问题,即运行的够快,占用的空间够少,在评比这两项内容的时候,我们引入了时间复杂度和空间复杂度两个复杂度的概念。虽然说我们可以在写完程序后对程序的时间进行计算和统计等,但那属于事后统计法,有一种事后诸葛亮的感觉,我们需要的是在写程序的时候就对整体的复杂性有一个大概的评估。 这里我们引入的是大O表示法,T(n)=O(f(n)),其中,T(n) 表示代码执行的时间;n 表示数据规模的大小;f(n) 表示每行代码执行的次数总和。因为这是一个公式,所以用 f(n) 来表示。公式中的 O,表示代码的执行时间 T(n) 与 f(n)

回文子串之Manacher算法

﹥>﹥吖頭↗ 提交于 2020-02-26 18:18:17
Manacher算法是一种可以在线性时间下求出一个字符串的最长回文子串的长度的算法。 最开始以为这个算法很难,因为是O(n)的,认真学过之后就觉得还好,所以大家还是要勇于尝试的。 参考和学习的博文: https://blog.csdn.net/ggggiqnypgjg/article/details/6645824?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 整个算法分为两步:   1.对文本字符串做简单的预处理   2.线性时间求出辅助数组p 及 答案 第一:   在原文本串的每个字符的左边都加上一个特殊字符(例如:‘#’, 字符不会在文本串出现),最后在末尾在加上一个特殊字符   例如:     文本串:abcd     预处理:#a#b#c#d#   之所以这么做是可以把原文本串变成一个长度为奇数的字符串,这样我们就可以根据奇数回文串中心对称的特点来解决 第二:   先说明辅助数组 p[ i ] 的含义:即从 i 个 字符 起 往右移动 p [ i ] 下可以移出以 s[ i ] 为 中心的回文串   例如:   字符串 # a # a # b # c # b # 下标 1 2 3 4 5 6 7 8 9 10 11 p数组 1

机器学习概述

妖精的绣舞 提交于 2020-02-26 15:38:23
导言 科技是第一生产力。 信息技术作为科技领域的重要组成部分,得到了全球范围的重视和大力发展。以物联网技术为例,美国、欧盟、日本和韩国等发达国家对其都投入了大量的资金与技术研究力量[1],以实现各自的战略计划。 日新月异的信息技术变革了我们的生活方式和工作方式,给我们带来了便利,也给我们带来了挑战。物联网技术、云计算技术的兴起,伴随着大数据的涌现。对海量数据进行分析,挖掘其数据价值的需求被提到案上。 机器学习作为一门基于学习算法的、将数据转换为信息的学科,在信息技术的各大领域中均大有作为。从垃圾邮件检测且自动归入垃圾文件夹,到信件的手写邮政编码识别且信件地区归类,这些初级的应用都可体现机器学习在生活和工作中的价值。 机器学习算法有两大类,一是Supervised Learning Algorithms(监督学习算法),另一类是Unsupervised Learning Algorithms(非监督学习算法)。按照这种分类,机器学习算法的任务可相应地归为两类:一类是学习原有数据,以产生正确的预测数据;另一类是对数据集进行聚类分析。它们的应用可涉及至地震预测预报、恶性癌细胞预测、新闻信息相关类聚类、社交网络分析、计算机群组管理和天体学数据分类等。其前景应用相当地广泛和切实。 概述 Google的首席经济学分析师Hal Varian在2009年1月的McKinsey

蓝桥杯 java 算法训练 排序

大憨熊 提交于 2020-02-26 15:16:15
算法训练 排序 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。   输入格式:输入只有一行,即三个整数,中间用空格隔开。   输出格式:输出只有一行,即排序后的结果。   输入输出样例 样例输入 9 2 30 样例输出 30 9 2 import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int[] x = new int[3]; int temp, i, j; for (i = 0; i < 3; i++) { x[i] = in.nextInt(); } for (i = 0; i < 3; i++) { for (j = i; j < 3; j++) { if (x[j] > x[i]) { temp = x[i]; x[i] = x[j]; x[j] = temp; } } System.out.print(x[i] + " "); } } } 来源: CSDN 作者: 看书程序员 链接: https://blog.csdn

加密算法极先锋之MD5算法

痴心易碎 提交于 2020-02-26 14:33:13
在开发过程中,避免不了要涉及到数据加密,比如用户账号密码的加密,用户敏感数据的加密,涉及到的加密算法种类繁多,作为拿来主义的开发者时间精力有限,能够清楚其中主流的加密算法和用途,就已经足够了。 主要的数据加密算法主要有: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算法的主要破解思路,其实核心只有一个,那就是暴力碰撞(其他还有两种 字典法

Adaboost算法解释

送分小仙女□ 提交于 2020-02-26 12:54:20
(3)Adaboost算法解释:    AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。    (i)前向分布算法     考虑加法模型    f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^{M} \beta_{m} b\left(x ; \gamma_{m}\right) f ( x ) = m = 1 ∑ M ​ β m ​ b ( x ; γ m ​ )        其中,基函数: b ( x ; γ m ) , b\left(x ; \gamma_{m}\right), b ( x ; γ m ​ ) , 基函数参数: γ m \gamma_{m} γ m ​ ,基函数的系数: β m \beta_{m} β m ​ 。     在给定训练数据集及损失函数 L ( y , f ( x ) ) \mathrm{L}(\mathrm{y}, \mathrm{f}(\mathrm{x})) L ( y , f ( x ) ) 的条件下,学习加法模型f(x)成为经验风险最小化即损失函数最小化问题:    min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min _{\beta_

展示谷歌排名算法

左心房为你撑大大i 提交于 2020-02-26 12:29:25
本文包括六章向您展示谷歌排名算法。 一、谷歌排名浏览二、排名浏览原则三、排名浏览中的关键词搜索四、如何优化页面标题和介绍以提高点击率五、如何优化内容以降低跳过率和提高停留时间六、排名浏览优化策略案例研究如果你在专心做搜索引擎优化,你需要优化排名浏览。谷歌最近发表声明称,排名下降是影响排名的第三大因素,而且变得越来越重要。   一、对谷歌RankBrain观点的解释   RankBrain是谷歌用来对搜索结果进行排序的机器学习算法。它还有助于谷歌分析和理解用户的搜索意图。   在RankBrain应用之前,工程师们手动调整搜索引擎算法。其处理方法与此类似,调整变量的权重,观察用户数据上线后是否有所改善。如果效果好,调整是有效的,所以新算法在线应用。如果数据没有改善甚至减少,算法调整无效,其他变量的查看效果将继续调整。   目前,谷歌工程师仍致力于改进算法,但兰克布雷恩将在后台进行处理。   简单地说,RankBrain会自动修改它的算法。根据相应的关键词,RankBrain将增加或减少测量因素的权重,包括外部链、内容是否及时更新、内容长度、域名权重等。然后它将计算用户和新搜索结果之间的交互数据。如果用户喜欢新算法处理的搜索结果,它将保持新算法,如果不喜欢,它将回滚并恢复原始算法。 来源: oschina 链接: https://my.oschina.net/u/4461679