自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

十步杀一人-千里不留行

让技术永远都有饭吃,每天进步一点点

转载 算法高级(4)-遗传算法(Genetic Algorithm)简介

01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有...

2019-08-30 23:38:37

阅读数 201

评论数 0

原创 算法高级(3)-那个神奇的微软小冰,她为啥那么聪明?

最近给自己的公号接入了“微软小冰”自动回复这个人工智障,也有很多粉丝会在后台跟她留言互动,有时候,你会觉得她回复的真的挺像个人类的。但是当你带着她就是个机器人的主见跟她聊的时候,明显感觉她还差得远。今天就来聊聊这个还不能称之为人的小冰吧。 【小冰,微软人工智能框架少女,东方卫视主播,央美毕业...

2019-08-30 22:42:20

阅读数 702

评论数 0

原创 算法高级(2)-多年以前的电脑算命是怎么回事?

“电脑算命”看起来挺玄乎,只要你报出自己出生的年、月、日和性别,一按按键,屏幕上就会出现所谓性格、命运的句子,据说这就是你的“命”。 一、官方定义 【百度百科】电脑算命,即在电脑上用软件算命。网站用专业的命理知识编写特定的批语做成程序,并把这些批语和不同的出生时间进行匹配,匹配完毕后,形成一个...

2019-08-30 21:13:39

阅读数 269

评论数 0

原创 算法高级(1)-概述

算法是对特定问题求解步骤的描述。对于同一个问题,我们可能会用不同的算法来求解,我们可以根据算法的可读性、效率等进行取舍。针对不同的数据保存方式,也会有不同的算法。 很多同学会觉得,我工作经验五年,工作游刃有余,基本上遇不到什么解决不了的问题,你前面讲了那么多算法,算法真的有用吗,我在工作中貌似从...

2019-08-28 23:30:25

阅读数 233

评论数 0

原创 程序员的算法课(20)-常用的图算法:最小生成树(MST)

一、图的生成树和最小生成树 生成树(SpanningTree):如果一个图的子图是一个包含图所有节点的树,那这个子图就称为生成树。图的生成树不惟一。从不同的顶点出发进行遍历,可以得到不同的生成树。专业的说法:在一个无向连通图中,如果存在一个连通子图包含原图中所有的结点和部分边,且这个子图不存在回...

2019-08-27 22:53:41

阅读数 182

评论数 0

原创 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)

一、最短路径问题 【google笔试题】一个环形公路,给出相邻两点的距离(一个数组),求任意两点的最短距离,要求空间复杂度不超过O(N)。 如果从有向图中某一顶点(称为源点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径使得沿此路径上各边上的权值总和达到最小。 最短路径问题是图...

2019-08-27 22:53:03

阅读数 183

评论数 0

原创 程序员的算法课(18)-常用的图算法:广度优先(BFS)

一、广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。 它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问...

2019-08-27 22:52:41

阅读数 168

评论数 0

原创 程序员的算法课(17)-常用的图算法:深度优先(DFS)

一、深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 ...

2019-08-27 22:52:04

阅读数 187

评论数 0

原创 程序员的算法课(16)-B+树在数据库索引中的作用

前文讲了二叉树和多路树,二叉树的性能很好,像AVL树、红黑树都是很优秀的结构,那么在数据库索引中,并没有采用二叉树这种结构,这是为什么呢?因为,有性能更好的树来做搜索!目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构。 一、B-树和B+树回顾 1.B-树 B-...

2019-08-27 20:26:32

阅读数 179

评论数 0

原创 程序员的算法课(15)-分治法获取文件中出现频次最高100词

一、问题描述 这个问题在大数据面试中容易出现,问题如下: 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M,要求返回频数最高的100个词。 二、思路 此处1G文件远远大于1M内存,分治法,先hash映射把大文件分成很多个小文件,具体操作如下:读文件中...

2019-08-25 17:50:26

阅读数 452

评论数 0

原创 程序员的算法课(14)-Hash算法-对海量url判重

前面给大家讲了哈希表(散列)这种数据结构,那么使用哈希表来解决实际问题,那就是Hash算法了,我们一起来看看。 一、Hash算法的概念 Hash算法(Hash Algorithm),简称散列算法,也成哈希算法(英译),是将一个大文件映射成一个小串字符。与指纹一样,就是以较短的信息来保证文件的唯...

2019-08-25 17:48:55

阅读数 535

评论数 2

原创 程序员的算法课(13)-分治法

一、什么是分治 【百度百科】分治法((Divide and Conquer))可以通俗的解释为:把一片领土分解,分解为若干块小部分,然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化。 分治法的精髓: 分--将问题分解为规模更小的子问题; 治--将这些规模更...

2019-08-25 17:48:01

阅读数 204

评论数 0

原创 程序员的算法课(11)-KMP算法

一、KMP算法定义 【百度百科】KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体...

2019-08-25 17:47:17

阅读数 210

评论数 0

原创 程序员的算法课(12)-使用通配符*,?等来查找字符串

一、前言 相信大家都用过文本编辑器(EditPlus,notepad++,sublime..)、Word或者开发IDE工具(IDEA,Eclipse..);甚至于你应该也写过不少SQL语句;你也用过百度、谷歌(怎么上谷歌我也不会,不要问我)搜过你要的内容。里面都会有个很重要的功能,那就是搜索,而...

2019-08-22 23:09:33

阅读数 199

评论数 0

原创 程序员的算法课(10)-字符串排序算法实例(纯代码)

一、低位优先(Least-Signifcant-Digit First,LSD) 字符串的低位优先排序算法目的就是将一组字符串按照从右到左的顺序依次比较指定索引位置的字符大小并排序。根据上述字符串的分组算法的逻辑,很容易使用下面的代码实现:下面的代码实质上就是将一组字符串按照倒数第一个字符分组(...

2019-08-22 22:52:21

阅读数 197

评论数 0

原创 程序员的算法课(9)-常见字符串算法

一. 字符串排序算法 1.低位优先(Least-Signifcant-Digit First,LSD) 该算法要求被排序的每个字符串长度都相等。它会把字符串当成数字,从字符串的右边开始向左检查字符(相当于从数字的最低位到高位)。 2. 高位优先(MSD)的字符串排序 它不要求被排序的字符串...

2019-08-22 22:49:57

阅读数 198

评论数 0

原创 程序员的算法课(8)-贪心算法:理解霍夫曼编码

一、一种很贪婪的算法定义 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称。 【百度百科】贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 二、贪心跟动态规划 贪心选择 贪...

2019-08-22 22:22:56

阅读数 197

评论数 0

原创 程序员的算法课(7)-01背包问题

一、01背包问题描述 有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? i 1 2 3 4 w(体积) ...

2019-08-21 23:26:46

阅读数 193

评论数 0

原创 程序员的算法课(6)-最长公共子序列(LCS)

上一节我们讲了动态规划,我们也知道,动态规划对于子问题重叠的情况特别有效,因为它将子问题的解保存在存储空间中,当需要某个子问题的解时,直接取值即可,从而避免重复计算! 这一节我们来解决一个问题,就是最长公共子序列。 一、啥叫最长公共子序列? 【百度百科】LCS是Longest Common ...

2019-08-21 22:53:17

阅读数 244

评论数 0

原创 程序员的算法课(5)-动态规划算法

前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2)。动态规划算法是以空间置换时间的解决方式。 一、什么是动态规划 动态规划(Dynamicprogramming)是一种在数学、计算机科学和经济学中使用的,通过把原问题分...

2019-08-20 23:25:42

阅读数 195

评论数 0

提示
确定要删除当前文章?
取消 删除