算法
文章平均质量分 53
simonGeek
Geek技术 Share想法 Update思想 Download成果
展开
-
KMP算法
KMP算法用于完成字符串的模式匹配;与朴素字符串匹配算法相比,KMP算法对字符串的模式匹配进行优化,提高匹配效率。方法:引入前缀函数,目的跳出没必要检测的字符。KMP算法针对的是淄川有对称属性。前缀数组或者next数组,记录的是字符串在匹配失败后需要向前移动几位字符。注:对称不是中心对称,而是中心字符串对称,例如abcabc。kmp算法的难点:前缀函数的求法;前缀函数的使用转载 2015-03-25 22:17:26 · 633 阅读 · 0 评论 -
桶排序
最快最简单的排序——桶排序 在我们生活的这个世界中到处都是被排序过的。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦。期末考试完了老师要将同学们的分数按照从高到低排序。小哼的班上只有5个...转载 2018-06-21 18:16:07 · 535 阅读 · 0 评论 -
冒泡排序
【坐在马桶上看算法】算法2:邻居好说话:冒泡排序 简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[2100000001]。因为我们需要用2100000001个“桶”来存储0~2100000000之间每一个数出现的次数。即便只给你5个数进行排序(例...转载 2018-06-21 18:14:43 · 372 阅读 · 0 评论 -
快速排序【强烈推荐】
上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端...转载 2018-06-21 18:12:50 · 2980 阅读 · 1 评论 -
机器学习-5 多变量的梯度下降 Gradient Descent For Multiple Variables
多变量的梯度下降 Gradient Descent for Multiple Variables梯度下降等式的本身是完全相同的形式,我们只是需要强调一下多变量('n' features)的问题换句话说:下面的图片比较了梯度下降在单变量和多变量的两种场景:梯度下降实践 I-特征尺度我们可以通过将输入值控制在一个相同的范围内来加速梯度下降的速原创 2017-03-07 14:28:31 · 5074 阅读 · 0 评论 -
LeetCode详解 之 Path Sum I and II(Java)
题目Path Sum I:Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.For example:Given the b转载 2015-05-24 00:55:29 · 2373 阅读 · 0 评论 -
Merge k Sorted Lists -- LeetCode
这道题目在分布式系统中非常常见,来自不同client的sorted list要在central server上面merge起来。这个题目一般有两种做法,下面一一介绍并且分析复杂度。 第一种做法比较容易想到,就是有点类似于MergeSort的思路,就是分治法,不了解MergeSort的朋友,请参见归并排序-维基百科 ,是一个比较经典的O(nlogn)的排序算法,还是比较重要的。思路是先分成两转载 2015-05-20 14:56:29 · 644 阅读 · 0 评论 -
典型排序算法比较
根据带排序数据是否全部放入内存,排序分为内排序和外排序。下面就根据我看书的体会,主要分析内排序的性能。内排序的种类:插入排序(直接插入排序,希尔排序),选择排序(简单选择排序、堆排序),交换排序(冒泡排序、快速排序),归并排序。其中用的比较多的是插入排序、归并排序、快速排序。排序算法的比较:性能的比较可以从以下5个方面进行分析:时间复杂度(平均情况、最好情况、最差情原创 2015-05-06 10:38:24 · 1497 阅读 · 2 评论 -
有序数组转换为平衡二叉树
抓住两个条件:有序数组,平衡二叉树 根据有序数组可以利用二分查找对数组进行均匀划分; 平衡二叉树是左右子树的深度差控制在1以内。 具体JAVA程序如下原创 2015-04-09 09:27:58 · 2945 阅读 · 0 评论 -
二叉树的遍历——前序,中序,后序,层序
二叉树的遍历原因:将序列编程图或者二叉树的形式,确实很直观。但是,最终的处理是交给计算机,计算机的处理只有判断、循环等,也就是只可以处理先行序列。而二叉树的遍历就是将序列的树结构编程线性序列,将线性序列交给计算机处理。二叉树的遍历大致分为四种:前序遍历、中序遍历、后序遍历,层序遍历。前序遍历(从上向下):从根节点开始并且取根节点值,遍历根节点的所有左子树以及左子树的所有节点,然后再进行根节点的右子树原创 2015-04-07 15:42:42 · 1785 阅读 · 0 评论 -
桶排序 基数排序
桶排序和基数排序,在今天和同学讨论中听到,完全不懂,后来经过查阅,将这两种算法的综述性介绍汇总如下:桶排序和基数排序是从分配排序演进的,大致的顺序是分配排序-桶排序-基数排序。通过下面的阐述可以发现,桶排序不适合数据值集合很大的情况,基数排序就是针对桶排序的这个缺点进行的改进。桶排序:(来自百度百科)桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原原创 2015-04-22 23:19:20 · 1845 阅读 · 1 评论 -
四则运算-栈方法 JAVA
栈的规则是先进后出。利用压栈的思想来计算四则运算表达式方法如下:创建两个栈,一个存放四则表达式的数字,另一个存放对应的操作符。 例如一个表达是(3-1)*6-8/4,那么就将这个表达是的数字和操作符分别压入各自的栈,压栈规则如下: 1>遇到数字则直接压入数字栈顶; 2>遇到运算符(+-*/)时,若操作符栈为空,则直接放入操作符栈顶,否则,见3; 3>若操作符栈顶元素的优先级比当前运算符的优先转载 2015-04-01 23:38:40 · 1226 阅读 · 0 评论 -
JAVA实现随机无重复数字功能
JAVA实现随机无重复数字功能 本文给大家介绍如何在JAVA中实现随机无重复数字的功能。如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到。包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题的模式和基础知识如何。 希望这篇文章能给初次接触的朋友一些帮助,因为我曾接触过一些朋友要么写不出来,要么使用很平铺的思维方式去实现它。 一般有点开发经验转载 2015-04-02 22:54:53 · 631 阅读 · 0 评论 -
链表排序总结
这篇文章分析一下链表的各种排序方法。 以下排序算法的正确性都可以在LeetCode的链表排序这一题检测。本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针)struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 插入排序(算法中是直接交换节点,时间...转载 2018-06-22 17:44:14 · 653 阅读 · 0 评论