数据结构与算法
文章平均质量分 59
Herbert_Zero
这个作者很懒,什么都没留下…
展开
-
离散序列的一致性度量方法:动态时间规整(DTW)
动态时间规整:Dynamic Time Warping(DTW),是一种衡量两个离散时间序列相似度的方法,主要特点是在序列长度不一或x轴无法完全对齐的情况下,用满足一定条件的的时间规整函数描述两者之间的时间对应关系。DTW算法在各种模式匹配任务中被广泛使用,如语音识别、动态手势识别和信息检索等中。原创 2015-05-15 18:55:24 · 14968 阅读 · 3 评论 -
leetcode笔记:2Sum
leetcode算法题目:2 sum,基本题意是给定一组整数和一个常数target,试图在这一组数里找到两个数使得两者的和等于target,结果要求返回两个数的下标。原创 2015-05-14 09:52:47 · 2809 阅读 · 0 评论 -
模式识别:三层BP神经网络的设计与实现
本文的目的是学习和掌握BP神经网络的原理及其学习算法。在MATLAB平台上编程构造一个3-3-1型的singmoid人工神经网络,并使用随机反向传播算法和成批反向传播算法来训练这个网络,这里设置不同的初始权值,研究算法的学习曲线和训练误差。原创 2015-05-29 01:49:20 · 54869 阅读 · 8 评论 -
模式识别:分类回归决策树CART的研究与实现
本实验的目的是学习和掌握分类回归树(CART)算法。CART提供一种通用的树生长框架,它可以实例化为各种各样不同的判定树。CART算法采用一种二分递归分割的技术,将当前的样本集分为两个子样本集,使得生成的决策树的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简洁的二叉树。在MATLAB平台上编写程序,实现了非剪枝完全二叉树的创建、应用以及近似剪枝操作。原创 2015-06-19 19:50:48 · 8774 阅读 · 1 评论 -
常用的内排序算法与C++实现
《数据结构与算法分析》几乎是所有计算机编程的基础,而在招聘过程中基本上只要是中大型的互联网公司均会考察这方面的内容。在这门知识中最重要的一部分是排序。在VS 2013上简单实现了一些基础的内排序算法。原创 2015-06-21 15:46:32 · 3206 阅读 · 1 评论 -
模式识别:k-均值聚类算法的研究与实现
本实验的目的是学习和掌握k-均值聚类算法。k-均值算法是一种经典的无监督聚类和学习算法,它属于迭代优化算法的范畴。本实验在MATLAB平台上,编程实现了k-均值聚类算法,并使用20组三维数据进行测试,比较分类结果。实验中初始聚类中心由人为设定,以便于实验结果的比较与分析。原创 2015-06-10 20:41:20 · 13707 阅读 · 1 评论 -
leetcode笔记:Remove Element
Remove Element这道题和Remove Duplicates from Sorted Array类似,不同的是这里只要删除值等于给定值的元素即可,可以采用和前面的题相同的做法:可以将原来的数组看作一个栈,设定一个栈顶指针,在对数组进行遍历的时候,判断元素是否等于给定值,如果等于,则直接进行数组的下一个元素,如果不等于,则将该元素放入到栈顶,然后更新指针并处理数组的下一个元素。原创 2015-07-26 14:49:15 · 1077 阅读 · 0 评论 -
leetcode笔记:Add Binary
这道题考察两个二进制数相加,考虑到输入的是两组string,同时注意在运算时从左到右分别是从低位到高位,因此需要考虑对输入进行翻转处理。原创 2015-08-15 21:34:20 · 1394 阅读 · 0 评论 -
leetcode笔记:3Sum Closest
3Sum Closest该题与3Sum的要求类似,不同的是要求选出的组合的和与目标值target最接近而不一定相等。但实际上,与3Sum的算法流程思路相似,先是进行排序,然后顺序选择数组A中的下标为i的元素值作为组合中三个数的最小值,进而寻找另外两个更大的值,最后求出三个数的和。原创 2015-07-22 22:21:14 · 1461 阅读 · 0 评论 -
leetcode笔记:4Sum
leetcode算法题目:4 sum。解题技巧这道题和另外一道题3 Sum很类似,但这道题是在数组中寻找四个数,使得其和为预设的一个值target,同时要求这三个数只能出现一次。原创 2015-07-17 17:00:41 · 2486 阅读 · 2 评论 -
leetcode笔记:Remove Duplicates from Sorted Array
从题目中可知,数组中的元素事先已经过排序,因此一个简单而易于实现的方法是从第二个元素开始对数组元素进行遍历,并判断该元素是否和前面的元素相同。题目要求返回不重复的元素的个数。算法的一个要求是:返回的数组的元素都是不重复,同时要求remove duplicates in place,这意味着不能重新定义一个数组来保存不重复的元素。原创 2015-07-23 17:14:54 · 1486 阅读 · 0 评论 -
使用线性同余法生成伪随机数/序列(C++实现)
计算机上可以用物理方法来产生随机数,但价格昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生,这样产生的序列与真正的随机数序列不同,所以称为伪随机数或伪随机序列,只要方法和参数选择合适,所产生的伪随机数就能满足均匀性和独立性,与真正的随机数具有相近的性质原创 2015-08-16 00:50:23 · 18913 阅读 · 3 评论 -
leetcode笔记:Valid Palindrome
这道题考察回文数(palindrome),这一概念起源于在数学中一类数字,这类数字拥有这样的特征:设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。同理,可以定义英文/中文的回文数,概念和以上的类似,本题就是检测字符串是否为回文数。原创 2015-08-31 13:42:14 · 1368 阅读 · 0 评论 -
leetcode笔记:Remove Duplicates from Sorted Array II
这道题和Remove Duplicates from Sorted Array这道题是类似的,不同的是这里允许出现重复的数字而已,可以采用二分搜索的变种算法,只不过加入了剔除和第一个元素相同的元素的过程。另一个思路是加入一个变量,用于记录元素出现的次数。这题因为是已经排序的数组,所以一个变量即可解决。原创 2015-07-24 16:42:17 · 1612 阅读 · 0 评论 -
leetcode笔记:Search in Rotated Sorted Array
这道题出现了旋转的情况,即比第一个元素小的元素可能出现在数值的后半段或者不出现。因此,可以考虑采用变种的二分查找,即在比较中间元素与目标之前,先比较第一个元素与目标的关系,该题的难点在于确定其边界问题。原创 2015-07-24 17:45:10 · 1642 阅读 · 0 评论 -
leetcode笔记:Permutation Sequence
Cantor expansion问题。假设有{1,2,3,4,…,n},对其中的元素进行排列,总共有n!种组合,将它们从小到大排序,怎样知道其中第k个组合的形式是怎样的?主要研究的是Cantor expansion算法。原创 2015-09-02 13:43:58 · 3786 阅读 · 5 评论 -
leetcode笔记:Valid Sudoku
关于Sudoku矩阵的性质,可以简单概括为:对于矩阵中每一行、每一列以及每个`3×3`的九宫格区域是否存在唯一的`0~9`排列组合,如果存在相同的元素,则该Sudoku矩阵不合法。这道题比较简单,就是遍历Sudoku矩阵的所有元素,检查各元素是否满足Sudoku的性质。原创 2015-09-09 20:39:07 · 2020 阅读 · 2 评论 -
leetcode笔记:Merge Sorted Array
Merge Sorted Array这道题没有很复杂的算法,只是一个技巧问题。如果单纯得考虑从小到大地将两个数组进行合并的话,每次在num1中插入一个数的话,需要将后面的元素都向后移动一位,这样,整个处理过程的时间复杂度为O(m*n)。原创 2015-07-28 00:57:28 · 1277 阅读 · 0 评论 -
leetcode笔记:Single Number II
Single Number II与Single Number(数组中其他数出现两次,仅有一个出现一次的)有所不同,本题变为序列中有一个数出现一次,其他元素出现了三次,同样要求时间复杂度为线性,空间复杂度为常数。事实上,该算法仍可以借助位运算来实现。原创 2015-09-05 11:26:18 · 1815 阅读 · 0 评论 -
数据结构与算法分析:哈希表
哈希表又叫散列表,是实现字典操作的一种有效数据结构。哈希表的查询效率极高,在没有冲突(后面会介绍)的情况下可做到一次存取便能得到所查记录,在理想情况下,查找一个元素的平均时间为O(1)(最差情况下散列表中查找一个元素的时间与链表中查找的时间相同:O(n),但实际情况中一般散列表的性能是比较好的)。原创 2015-09-25 07:41:12 · 8740 阅读 · 9 评论 -
leetcode笔记:Rotate Image
该题要求将图像顺时针旋转90度,最简单的做法就是画个图出来观察旋转90度之后的图像的情况,经过分析可知,顺时针旋转90度就是将原来的图像的最后一行作为第一列,倒数第二行作为第二列,因此类推,第一行作为最后一列。原创 2015-09-10 17:26:06 · 1512 阅读 · 0 评论 -
leetcode笔记:Power of two
一. 题目描述Given an integer, write a function to determine if it is a power of two.二.题目分析该题要求简单,给定一个整数,判断其是不是2的整数次幂,这道题的解题关键是找到一个规律:如果一个数字是2的整数次幂,若将该数写为二进制数,这个二进制数中有且仅有一位为1,其余均为0。根据这一性质,不难给出以下给出两种解决方法。三.示例原创 2015-09-11 01:54:41 · 2123 阅读 · 0 评论 -
leetcode笔记:Merge Two Sorted Lists
这道题题意是,将两个已排序的链表的各个元素进行比较并合并成一个链表。原创 2015-09-25 23:59:12 · 1609 阅读 · 1 评论 -
leetcode笔记:Plus One
一道高精度计算的题,从低位到高位进行计算,同时考虑进位的问题,若最高位计算结果还有进位,就需要在最高位前面添加一位。可做到时间复杂度为O(n),空间复杂度为O(1)。原创 2015-09-11 13:57:44 · 2197 阅读 · 0 评论 -
leetcode笔记:Reorder List
直接按照题目的要求求解,设ListNode *head为待处理的链表,算法包括以下步骤: 1. 将链表head分为前后两部分,前半部分链表head1 和后半部分链表head2; 2. 将后半段链表head12做逆序操作; 3. 合并head1, head2;原创 2015-09-28 19:59:47 · 1362 阅读 · 0 评论 -
leetcode笔记:Set Matrix Zeroes
给定一个数组,若某个元素的值为零,则将该元素所对应的行和列的每个元素都置零。该题对空间复杂度有要求。原创 2015-09-13 03:07:22 · 2645 阅读 · 0 评论 -
leetcode笔记:Gas Station
环形路线上有N个加油站,每个加油站有汽油gas[i],从每个加油站到下一站消耗汽油cost[i],问从哪个加油站出发能够回到起始点,如果都不能则返回-1,最后题目提到解是唯一的。原创 2015-09-12 20:58:12 · 2517 阅读 · 0 评论 -
leetcode笔记:Gray Code(2016腾讯软件开发笔试题)
格雷码是一种数字编码,其中的所有相邻整数在它们的二进制数字表示中只有一个数字不同。现要求打印出二进制比特数是n的所有格雷码。例如,n=2,所有的格雷码是0,1,3,2(对应二进制表示是00,01,11,10)。原创 2015-09-07 17:45:41 · 3583 阅读 · 2 评论 -
leetcode笔记:Evaluate Reverse Polish Notation(逆波兰式的计算)
该题考查逆波兰式,也叫后缀表达式(将运算符写在操作数之后)。假设有一个表达式E,其后缀形式定义如下: 1. 如果E是一个变量或常量,则E的后缀式是E本身; 2. 如果E是E1 operator E2形式的表达式,这里 operator 是如何二元操作符,则E的后缀式为E1, E2, operator; 3. 如果E是 (E1) 形式的表达式,则 E1 的后缀式就是E的后缀式。原创 2015-10-16 18:24:30 · 2609 阅读 · 0 评论 -
leetcode笔记:Count and Say
题目的具体意思是,根据一个数的读法,组合出下一个数,比如11,读作2(个)1,因此下个数是21;同理,21读作1(个)2、1(个)1,因此下个数是1211...原创 2015-09-14 09:09:39 · 1411 阅读 · 0 评论 -
leetcode笔记:Path Sum
这道题属于深度优先搜索的范畴,通过分别计算二叉树的左右子树是否的和是否等于sum-root->val来进行深度优先搜索,只有到达也结点搜索才结束,因此,递归的退出条件就是到达叶结点,同时,也要考虑输入是空指针的情况,这种情况返回false值。原创 2015-09-29 23:59:53 · 1414 阅读 · 2 评论 -
leetcode笔记:Single Number
该题目提到,一个数组中除了一个数只出现一次之外,其他数都出现了两次,找出这个特别的数。这道题对时间和空间有要求,面对这种情况,一般是暗示有十分轻巧而简便的方法进行求解。在一些场景下,使用基本的逻辑运算是个不错的选择。自己简单写了一下,再参照网上部分解法,基本都是使用了异或运算(XOR),任何数与自己进行按位异或都等于0,而任何数与0进行按位异或都等于本身。原创 2015-09-04 23:59:46 · 5989 阅读 · 3 评论 -
leetcode笔记:Maximum Depth of Binary Tree
这道题和Minimum Depth of Binary Tree一题相似,这个是求最大深度的,就是对二叉树进行递归,然后将子树的最大深度进行返回,最终得到这个树的最大深度。原创 2015-10-17 23:12:16 · 1318 阅读 · 0 评论 -
leetcode笔记:Minimum Depth of Binary Tree
这道题属于二叉树的深度优先搜索,然后返回深度最小的值,可以使用递归或迭代来实现。原创 2015-10-17 23:20:28 · 1150 阅读 · 0 评论 -
leetcode笔记:Simplify Path
一.题目描述Given an absolute path for a file (Unix-style), simplify it. For example, path = “/home/”, => “/home” path = “/a/./b/../../c/”, => “/c”Corner Cases: • Did you consider the case where path = “原创 2015-10-01 00:00:00 · 1628 阅读 · 0 评论 -
leetcode笔记:Path Sum II
这道题与Path Sum类似,不同的是这道题要求找到所有和等于给定值的路径,必须遍历完所有的路径。原创 2015-10-02 23:46:27 · 2044 阅读 · 0 评论 -
leetcode笔记:House Robber II
该题是House Robber的升级版。偷东西1版是一条街上一排房子,每个房子里面有金钱若干,其警报系统很怪,只有触发相邻的两个房间,警报系统才发出警报。问如何偷才能得到最大的值。原创 2015-11-03 23:59:29 · 1759 阅读 · 0 评论 -
leetcode笔记:Climbing Stairs(斐波那契数列问题)
题目的大意是,已知有n阶楼梯,每次只能爬1阶或2阶楼梯,问爬到第n阶楼梯共有几种爬法。题目可以看成是,设f(n)表示爬到第n 阶楼梯的方法数,为了爬到第n阶楼梯,有以下两种选择:• 从第f(n-1)阶前进1步;• 从第f(n-2)阶前进2步;则`f(n)`可写成:f(n) = f(n-1) + f(n-2)题目可转化为斐波那契数列的问题。原创 2015-09-16 00:20:58 · 3852 阅读 · 0 评论 -
leetcode笔记:Trapping Rain Water
该题目给定一组整数,把这组整数想像成一组柱形图,问图的凹槽处能填充多少单位的水。原创 2015-10-02 23:20:08 · 1766 阅读 · 0 评论 -
leetcode笔记:Factorial Trailing Zeroes
给定一个整数n,返回n!(n的阶乘)数字中的后缀0的个数。原创 2015-10-04 23:58:03 · 1503 阅读 · 1 评论