算法基础
文章平均质量分 68
Qregi
刚入行的初级程序员
展开
-
【算法基础】递归分治算法解决汉诺塔问题
今天下午,在昏昏欲睡的情况下外加中间补了十分钟的觉终于把这个汉诺塔的递归问题给弄明白了,下面进入正题:据说,古印度有这样一个传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。这就是经典的汉诺塔问题,那么,如何用编程语言原创 2018-03-11 17:44:56 · 3055 阅读 · 0 评论 -
【剑指offer】和为S的连续整数序列和1+2+3+4+...+n
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2018-09-02 16:20:26 · 411 阅读 · 0 评论 -
【算法基础】字符串的全排列算法
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。这道题是剑指offfer中一道经典的题,如果有n个元素,我们就能有n*(n - 1)个全排列,n为1时,只有一个全排列举...原创 2018-08-25 11:51:22 · 4445 阅读 · 0 评论 -
【剑指offer】丑数
原题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路:一个丑数的因子只可能在2,3,5中,所以,一个丑数肯定由另一个丑数乘以2,3,5获得,从1开始乘得到2,3,5,再用这三个丑数乘2,3,5得到一个队列:3,6,,10,6,9,15,10,...原创 2018-08-30 21:09:25 · 265 阅读 · 0 评论 -
【排序算法】堆排序的分析
在分析堆排序之前,我先讲一讲什么是堆如果一棵树中每个节点的关键字都大于或等于所有子节点中的关键字(子节点存在),那么就称树是堆有序的,在一棵堆有序的树中,不存在关键字大于根节点关键字的节点,那么什么是堆呢?堆是一个节点的集合,表现形式为数组,其中关键字按照堆有序的完全二叉树的形式排列如上图,上图是一个完全二叉树,而且每个关键字都大于他的任意一个子节点(子节点存在),把这棵树放到数组里面,如下:ar...原创 2018-03-24 16:30:42 · 388 阅读 · 0 评论 -
【排序算法】快速排序的分析改进
基本的快速排序最基本的快速排序是由C.A.R.Hoare在1960年提出的,快速排序的算法是一种分治排序算法它将数组划分为两个部分,然后分别对两个部分进行排序快速每次对数组重新排序,选择一个基准值key,然后让数组满足下面的两个个条件·a[l], ... ,a[i - 1]之中的元素都比key值要小·a[i + 1], ... ,a[r]之中的元素都比key值要大然后通过划分来完成排序,递归的去处...原创 2018-03-19 17:24:17 · 9349 阅读 · 0 评论 -
【算法基础】归并排序的分析
归并排序也是基本的排序之一,也挺重要的,所以写这么一篇博客总结一下归并排序的一个特性是,它对N个元素的文件排序所需要的时间与NlogN成正比,它的缺点是所需需要的空间和N成正比,要克服这个缺点的话,会造成代码非常复杂而且开销巨大。所以如果速度不是主要的问题,而且有足够的空间来使用,归并排序是值得考虑的归并排序是一种稳定的方法, 时间复杂度:T(n) = O(n㏒n),空间复杂度:S(n) = O(...原创 2018-03-23 12:08:45 · 1202 阅读 · 0 评论 -
【算法基础】关于埃拉托色尼筛选法
这几天在学习算法和数据结构,在学习基本数据结构数组的时候(数组就是最基本的数据结构),偶然看到了一种利用数组求素数的方法,就是用的埃拉托色尼筛选法那么埃拉托色尼筛选法到底是什么方法呢?埃拉托色尼选筛法(the Sieve of Eratosthenes)简称埃氏筛法,是古希腊数学家 埃拉托色尼(Eratosthenes 274B.C.~194B.C.)提出的一种筛选法。 是针对自然数列中的自然数而实原创 2018-03-12 18:23:30 · 1901 阅读 · 1 评论 -
【算法基础】关于分治法
分治法,字面意思是“分而治之”把一个问题分成两个或者多个相似的子问题再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这就是分治法,当然这些肯定是我从百度上抄的。分治法分为以下三个步骤:(1)将原问题分解为多个子问题。(2)对子问题递归求解。(3)将子问题合并为原问题的解例如:使用分治法求解数组中的最大值:#define Type int;Type Fi原创 2018-03-11 19:55:20 · 1592 阅读 · 0 评论 -
【剑指offer】翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 解题思路:循环...原创 2018-09-02 16:24:57 · 187 阅读 · 0 评论