自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 数据结构与算法之美(笔记7)跳表

如何理解跳表?对于一个单链表来说,即使数据是有序的,我们查找一个数据的时间复杂度也是O(n)。我们知道,单链表不能使用二分查找,其实我们通过改造链表,就能实现类似二分查找的算法。像图中一样,如果对链表建立一级“索引”,每两个结点提取一个结点到上一级,我们把抽取出来的那一级叫作索引或索引层。图中的down表示down指针,指向下一级结点。如果我们要查找16,可以先在索引层进行遍...

2019-04-08 23:11:59 485

原创 数据结构与算法之美(23)拓扑排序

如何确定文件依赖?我们知道,一个完整的项目往往会包含很多代码源文件。编译器在编译整个项目的时候,需要按照依赖关系,依次编辑每个源文件。比如,A.cpp依赖B.cpp,那在编译的时候,编译器需要先编译B.cpp,才能编译A.cpp。编译器通过分析源文件或者程序员事先写好的编译配置文件(比如makefile)文件,来获取这种局部的依赖关系。那编译器又该如何通过文件两两之间的局部关系,确定一个全...

2019-04-03 11:01:50 201

原创 数据结构与算法之美(笔记22)回溯算法

如何理解回溯算法?回溯的处理思想,有点类似枚举搜索。我们枚举所有的解,找到满足期望的解。为了有规律地枚举所有的解,避免遗漏或者重复,我们把问题求解的过程分为好几个阶段。每个阶段,我们都会面对一个分岔路,我们随意选择一条路走,当发现这条路不通的时候,就回退到上一个岔路口,另选一种走法继续走。八皇后问题我们有一个8x8的棋盘,希望往里放8个棋子(皇后),每个棋子所在的行、列、对角线都不能有...

2019-04-02 15:31:23 186

原创 数据结构与算法之美(笔记22)贪心算法

如何理解“贪心算法”?假设我们有一个可以容纳100kg物品的背包,可以装各种物品。我们有以下5种豆子,每种豆子的总量和总价值都不一样。为了让背包中所装物品的总价值最大,我们应该在背包中装哪些豆子?豆子又该装多少?我们只要算一算每个物品的单价,按照单价由高到低依次来装就好了。单价依次是:黑豆,绿豆,红豆,青豆,黄豆。所以,我们在背包中装20kg黑豆,30kg绿豆,50kg红豆。总结一...

2019-04-01 21:53:42 204

原创 数据结构与算法(笔记21)AC自动机

基于单模式串和Trie树实现的敏感词过滤我们前面讲了好几种字符串匹配算法,有BF,RK算法,BM算法,KMP算法,还有Trie树,前面四种都是单模式匹配算法,只有Trie树是多模式串匹配算法。单模式匹配算法,是在一个模式串和一个主串之间进行匹配,也就是说,在一个主串中查找一个模式串。多模式串匹配算法,就是在多个模式串和一个主串之间作匹配。也就是说,在一个主串中查找多个模式串。我们可以对...

2019-04-01 20:58:46 180

原创 数据结构与算法之美(笔记19)字符串匹配:KMP算法

KMP算法基本原理KMP算法的核心思想:我们假设主串是a,模式串是b。在模式串与主串匹配的过程中,当遇到不可匹配的字符的时候,我们希望找到一些规律,可以将模式串往后多滑动几位,跳过那些肯定不会匹配的过程。我们类比BM算法,在模式串和主串匹配的过程中,把不能匹配的那个字符仍然叫作坏字符,把已经匹配的那段字符串叫作好前缀。当遇到坏字符的时候,我们就要把模式串往后滑动,在滑动过程中,只要...

2019-03-31 16:16:50 166

原创 数据结构与算法之美(笔记20)Trie树

什么是"Trie"树Trie树,是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。现在,我们先来看下,Trie树到底上什么样子。假设我们有6个字符串,它们分别是:how,hi,her,hello,so,see。我们希望在里面多次查找某个字符串是否存在。如果每次查找,都是拿要查找的字符串跟这6个字符串依次进行字符串匹配,那效率就比较低,有没有更加高效...

2019-03-30 22:58:50 565

原创 数据结构与算法之美(笔记18)字符串匹配:BM算法

BM算法的核心思想我们把模式串和主串的匹配过程,看作模式串在主串中不停地往后滑动。当遇到不匹配的字符时,BF算法和RK算法的做法是,模式串往后滑动一位,然后从模式串的第一个字符开始重新匹配。在这个例子中,主串中的c在模式串中是不存在的,所以,模式串向后滑动的时候,只要c与模式串有重合,肯定无法匹配。所以,我们可以一次性把模式串往后移动几位,把模式串移动到c的后面。今天要讲的B...

2019-03-30 16:58:50 326

原创 数据结构与算法之美(笔记17)字符串匹配:BF、RK算法

BF算法先讲讲主串和模式串。比方说,我们在字符串A中查找字符串B,那字符串A就是主串,字符串B就是模式串。我们把主串的长度记为n,模式串的长度记为m。因为我们是在主串中查找模式串,所以有n>m。BF算法可以用一句话来概括:我们在主串中,检查其实位置分别为0、1、2...n-m 且长度为n-m+1个子串,看有没有跟模式串匹配的。从上面的例子,我们可以看到,在极端的情况下,比...

2019-03-30 10:29:46 272

原创 数据结构与算法之美(笔记16)深度和广度优先搜索

什么是“搜索”算法?图上的搜索算法,最直接的理解就是,在图中找出从一个顶点出发,到另一个顶点的路径。具体的方法有很多,比如深度优先,广度优先搜索,还有A*,IDA*等启发式搜索算法。广度优先搜索(bfs)直观地讲,它其实就是一种“地毯式”层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。原理虽然看起来简单,但是实现起来却比较难。先给出代码,再解释:...

2019-03-29 22:20:40 157

原创 数据结构与算法之美(笔记15)图的表示

如何理解图?我们直到,树中的元素我们称为节点,图中的元素我们就叫作顶点(vertex)。从画的图中知道,图中的一个顶点可以与任意其他顶点建立连接关系,我们把这种关系叫作边(edge)。我们日常生活中的社交网络,就是一个很典型的图的应用。比如微信,我们把每一个用户看成一个顶点。如果两个用户之间相互添加好友,那就在两者之间建立一条边。其中,每个用户有多少个好友,对应到图中,就叫作顶点的度...

2019-03-29 15:51:06 247

原创 数据结构与算法之美(笔记14)堆的应用

一、优先级队列我们前面讲过,队列最大的特性就是先进先出。不过,在优先级队列中,数据的出队顺序不是先进先出,而是按照优先级来,优先级最高的,最先出队。一个堆就可以看做一个优先级队列。很多时候,它们只是概念上的区分而已。往优先级队列中插入一个元素,就相当与往堆中插入一个元素,从优先级队列中取出优先级最高的元素,就相当于取出堆顶元素。1.合并有序小文件假设我们有100个文件,每个文件的大...

2019-03-28 16:30:38 149

原创 数据结构与算法之美(笔记13)堆

如何理解“堆”?堆的要求:堆是一个完全二叉树 堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值。对于每个节点的值都大于等于子树中每个节点值的堆,我们叫做“大顶堆”。对于每个节点的值都小于等于子树中每个节点的值的堆,我们叫做“小顶堆”。如何实现一个堆?我们知道,完全二叉树比较适合用数组来存储。用数组来存储完全二叉树是非常节省存储空间的。因为我们不需要左右字节的...

2019-03-28 11:04:04 158

原创 数据结构与算法之美(笔记12)递归

如何理解递归?举个例子,周末你带着女朋友取电影院看电影,女朋友问你,咋们闲杂坐在第几排?电影院里面太黑了,看不清,没法数,现在那你怎么办?你可以问前面一排的人他是第几排,你想只要在他的数字上加上,就知道自己在哪一排了。但是,前面的人也看不清,所以它也问前面的人,就这样一排排往前问,直到问到第一排的人,说我在第一排,然后再这样一排一排再把数字传过来。这就是一个非常标准的递归求解问题的分解...

2019-03-27 16:54:20 271

原创 数据结构与算法之美(笔记10)二叉树

树比如下面这幅图,A节点是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称兄弟节点。我们把没有父节点的节点叫做根节点。我们把子节点的节点叫做叶子节点或者叶节点。另外,关于“树”,还有三个比较相似的概念:高度,深度,层。二叉树二叉树,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点和右子节点。其中,编号为2...

2019-03-25 09:14:57 117

原创 数据结构与算法之美(笔记9)哈希算法

什么是哈希算法?我们前面讲到散列表,散列函数,这里又是哈希算法,实际上,散列函数就是哈希算法的一个特例。只不过在散列表中,我们通常希望散列函数简单,才不会影响查找等的性能。哈希算法的定义和原理很简单,就是把任意二进制串值映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始的数据映射之后得到的二进制值串就是哈希值。哈希算法满足的几点要求:从哈希值不能反向推导出原始数据。 ...

2019-03-20 17:07:11 226

原创 数据结构与算法之美(笔记8)散列表

目录散列思想散列函数散列冲突如何设计一个工业级的散列表如何设计散列函数装载因子过大了怎么办?如何避免低效地扩容?如何选择冲突解决方法?散列表与链表的结合散列思想散列表也叫哈希表,或者叫“hash”表。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。举个例子,假...

2019-03-20 00:32:21 175

原创 数据结构与算法之美(笔记6)二分查找

二分思想二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都用过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0。假设我们要寻找19。这里给出二分查找的代码实现:int binary_search(int* arr,int capacity,int elem){ int low = 0; int...

2019-03-14 20:58:01 147

原创 数据结构与算法之美(笔记5)排序

目录如何分析一个排序的算法?执行效率内存消耗排序算法的稳定性冒泡排序插入排序选择排序归并排序快速排序桶排序计数排序基数排序如何分析一个排序的算法? 执行效率 最好,最坏,平均时间复杂度 时间复杂度的系数,常数,低阶 比较的次数(或者移动的次数) 内存消耗 原地排序算法:就是特指空间复杂度是O(1)的排序算法。 排...

2019-03-13 23:30:20 272

原创 数据结构与算法之美(笔记4)队列

如何理解队列?先进者先出,这就是典型的“队列”。另外,同栈类似,队列也支持两个操作,入队和出队。如何实现顺序队列?我们可以使用数组来实现队列,也可以使用链表来实现队列。对于队列的数组实现,与栈不同,栈只需要一个栈顶指针,队列需要两个指针,一个头指针,一个尾指针。当有数据入队的时候,tail指针就向后移动一位,当有数据出队的时候head指针就向后移动一位。随着不断地入队和...

2019-03-13 15:13:36 198

原创 数据结构与算法之美(笔记3)栈

怎么理解栈?关于“栈”,我有一个非常贴切的例子,就是一摞叠在一起的盘子。我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。后进者先出,先进者后出,这就是典型的“栈”结构。如何实现数组栈?这里就直接给出代码了,我们可以看到,入栈以及出栈的时间复杂度都是O(1)。class arrayStack{private: ...

2019-03-12 21:50:22 107

原创 数据结构与算法之美(笔记2)链表

随机访问与数组不同,链表如果想要随机访问就不同数组一样了。我们再访问某一个节点的时候,需要从头节点开始一个一个的往下寻找。因此时间复杂度是O(n)。删除,插入操作对于链表来说,删除以及插入的时间复杂度是O(1)。但是,我们要删除或者插入的时候,需要找到这个位置,寻找这个位置的过程的时间复杂度就不是O(1)了。在实际的软件开发中,从链表中删除一个数据无外乎这两种情况:删除结点中“...

2019-03-11 21:24:02 184

原创 数据结构与算法之美(笔记1)数组

随机访问链表适合插入,删除,时间复杂度是O(1),数组支持随机访问,根据下标随机访问的时间复杂度是O(1)。插入,删除插入操作假设数组的长度为 n,现在,如果我们需要将一个数据插入到数组中的第K个位置。为了把第K个位置腾出来,我们需要把 k后的 n-k 位置顺序向后移动一位。最好时间复杂度:在最后一位插入,时间复杂度为:O(1)。最坏时间复杂度:在第一位插入,时间复...

2019-03-10 20:51:35 136

原创 caffe 训练自己的数据(faceboxes)

在上文已经成功了安装了caffe以及对faceboxes进行了复现,这次准备的是用faceboxes网络来训练自己的数据。一、制作自己的VOC数据集准备自己的图片,最好命名为00001.jpg的格式,这里给出python脚本重命名的代码。import ospath = "/home/chan/Windwill/Dataset" # 你的数据集的路径filelist = os.l...

2019-01-23 16:12:10 737

原创 caffe 安装以及复现 FaceBoxes

一、下载源码并编译首先在终端输入git clone https://github.com/zeusees/FaceBoxes.git得到源码。然后配置Makefile.config文件。主要看你的电脑是否使用GPU,我是使用CPU,只在一些地方做了更改。最重要的几个地方是:因为这里没有配置GPU,所以去掉CPU_ONLY := 1前面的注释,同时去掉那些cudnn,c...

2019-01-20 15:35:53 760

原创 吴恩达机器学习(一)-初识机器学习

一.什么是机器学习首先要明白机器学习是什么?实际上,即使是在机器学习的专业人士中,也不存在一个被广泛认可的定义来准确定义机器学习是什么或不是什么。来看一些大牛们尝试的定义:Arthur Samuel:在进行特定编程的情况下,给予计算机学习能力的领域。Tom Mitchell:一个好的学习问题定义如下,他说,一个程序被认为能从经验 E 中学习,解决任务 T,达到性能度量值P,当且仅当...

2018-08-30 16:15:16 570

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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