算法
文章平均质量分 90
guomutian911
这个作者很懒,什么都没留下…
展开
-
Fleury (弗罗莱) 算法通俗解释
Fleury (弗罗莱) 算法通俗解释1.定义2.举例说明图2为连通图G,现利用Fleury算法求它的欧拉通路。(注意区分:欧拉通路、欧拉回路)其中一种欧拉通路如下:4 5 8 7 6 8 9 1 5 3 2 4 6,其搜索路径如下图所示:现在让我们来分析算法实现过程: 假设我们这样走:4,6,8,5,此时在5处有三种选择(3,4,1原创 2014-12-23 17:19:50 · 47475 阅读 · 3 评论 -
【小米笔试题】二分查找算法的变形
一个有序数组的元素经过循环移动,元素的顺序可能变为“3 4 5 6 7 1 2”。怎样才能找出数组中最小的那个元素?假设数组中的元素各不相同。方法一:(暴力遍历)时间复杂度o(n)数组遍历,寻找逆序的元素// 暴力遍历,时间复杂度o(n) for(int i=0; i<n.length; i++){ if(n[i]>n[i+1]) {System.out.println("最小值原创 2015-10-04 15:32:18 · 723 阅读 · 0 评论 -
【Java算法】一天24小时中,时针和分针一共重合多少次?
思路:利用时针与分针的夹角来计算。参考:上一篇文章因为电子钟表,表针的跳动不是连续的,譬如分钟每次跳动6度,时针每次跳动0.5度。而编写程序时变量h小时,m分钟每次增量为1,所以我们设夹角gap为(-6~6之间)。这样带来另一个问题,一次重合接近和重合分开甚至是完全重合,最多可能出现3次夹角小于gap值。下面是Java实现代码。package XiaoMi;import java.ut原创 2015-10-03 20:18:00 · 9240 阅读 · 2 评论 -
Java-递归算法思想
递归算法设计的基本思想: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解。在做递归算法的时候,一定要把握住出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口是非常好理解的,就是一个条件,当满足了这个条件的时候我们就不再递归了。关键要抓住原创 2015-10-04 16:43:17 · 676 阅读 · 0 评论 -
【字符串反转总结】Java中七种方法实现
算法比较简单,注释就能说明问题,直接上代码!方法一:(利用递归实现)public static String reverse1(String s) { int length = s.length(); if (length <= 1) return s; String left = s.substring(0, length / 2); String right =原创 2015-10-05 10:37:08 · 15144 阅读 · 3 评论 -
【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
2016年小米校招笔试第一题(西安站)1 给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次。参考解法(Java版):package XiaoMi;/******************************************************** * 算法思想:将长线段细分为长度为1的小段,用布尔数组记录每一个小段; * 遍历所有长段原创 2015-10-10 14:02:37 · 4153 阅读 · 0 评论 -
【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置
2016年小米校招笔试第二题(西安站)2 现有一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置(如1234568,向右移动3次后为67812345)。参考解法(Java版):看题后第一直觉可能想去遍历数组,那么时间复杂度为o(n),不够高效。下面提供另一种参考方法。package XiaoMi;/*******************原创 2015-10-10 16:35:46 · 1590 阅读 · 0 评论 -
数组元素倒置-Java
通过两个嵌套循环,实现将数组中的元素倒置。Java实现如下:package test;import java.util.Scanner;public class test15 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stu原创 2015-09-23 19:05:47 · 3752 阅读 · 0 评论 -
冒泡排序-Java
在上一篇文章的代码中,加上一个判定语句,即可实现冒泡排序。上一篇:http://blog.csdn.net/guomutian911/article/details/48684359package test;import java.util.Scanner;public class test15 { /** * @param args */ public static v原创 2015-09-23 19:11:32 · 432 阅读 · 0 评论 -
求两数最大公约数,最小公倍数-Java
两数的最大公约数的计算是有数学规律的,程序只是按照规律辅助计算,其中包括了递归和循环两种实现。而最小公约数可由(m*n)/ (最大公约数)得到。具体代码如下:package test;import java.util.*;/*求最大公约数和最小公倍数*/public class MaxCommonDivisorAndMinCommonMultiple { public stat原创 2015-09-23 21:47:37 · 667 阅读 · 0 评论 -
【小米校招笔试】在Excel中,列的名称是这样一个递增序列:seq={A、B、C、... Z、AA、AB、AC、... AZ、BA、BB、BC、... BZ、CA、... ZZ、AAA、AAB...
2016年小米校招笔试第一题(成都站)1 在Excel中,列的名称是这样一个递增序列:seq={A、B、C、... Z、AA、AB、AC、... AZ、BA、BB、BC、... BZ、CA、... ZZ、AAA、AAB...}。求给出任意一个自然数n,求这个序列中第n个字符串。函数声明:String getColumnLable(int n)参考解法(Java版):pac原创 2015-10-14 19:13:43 · 6175 阅读 · 1 评论 -
字节与字符区别
(一)“字节”的定义字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。(二)“字符”的定义字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。(三)“字节”与“字符”它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:①原创 2015-10-14 12:31:14 · 626 阅读 · 0 评论 -
【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
2016年小米校招笔试第三题(西安站)3 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5,m = 3,r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个原创 2015-10-10 20:11:02 · 5506 阅读 · 0 评论 -
【图文解释】快速排序算法
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列原创 2015-11-18 20:38:57 · 2379 阅读 · 0 评论 -
【直观对比】奇偶校验 累加和校验 CRC校验
奇偶校验:所谓通讯过程的校验是指在通讯数据后加上一些附加信息,通过这些附加信息来判断接收到的数据是否和发送出的数据相同。比如说RS232串行通讯可以设置奇偶校验位,所谓奇偶校验就是在发送的每一个字节后都加上一位,使得每个字节中1的个数为奇数个或偶数个。比如我们要发送的字节是0x1a,二进制表示为0001 1010。采用奇校验,则在数据后补上个0,数据变为00原创 2017-11-22 12:49:32 · 4122 阅读 · 0 评论 -
【实例讲解】JS中形参、实参可以不一致
function myFunction(){var x=5;return x;}补充:JS中带返回值的函数,在函数定义时不体现//正文1.实参与形参个数可以有偏差,不会因为参数不统一而错误。例1:?123456functionbox(a,b){原创 2017-11-24 13:52:26 · 7002 阅读 · 1 评论 -
【小米面试题】-给定一个具体时间,计算时针与分针之间的角度
给定一个具体时间,计算时针与分针之间的角度在下面解法中,h表示小时,m表示分钟。同时,假定h的范围是0~23。我们得到以下规则:1)分针的角度(从12点整开始算起):360*(m/60)2)时针的角度(从12点整开始算起):360*(h%12)/12+360*(m/60)*(1/12),即为:时针时刻值+分针带来的偏移量3)时针和分针之间的角度:(时针的角度-分针的角度)%36原创 2015-10-03 17:48:10 · 3993 阅读 · 0 评论 -
Java中在一个字符串的固定位置插入字符串
要求是这样的:String str1 = "abc";String str2 = "abcdef";将str插入到str1字符串的第三个字符的后面,最后效果为:abcabcdef方法:利用StringBuffer方法,先追加上str2的前3字节,再加上str1,最后再加上str2的后面所有字节。参考代码:public static void main(String args原创 2015-10-04 15:52:57 · 13978 阅读 · 1 评论 -
【异或交换原理】按位进行异或操作,实现数的交换
用按位异或来交换数原理是什么?比如, int x=7,y=8; x=x^y;y=x^y;x=x^y; 结果x=8,y=7;那么,你写的例子就是利用异或的方法将两个数交换,就如同:int x=7,y=8; x=x+y; y=x-y; x=x-y;它们的道理一样,你不妨仔细体会一下!好,接下来进入正题.... 实际原理就是数字A异或B两次原创 2015-10-05 10:06:25 · 2119 阅读 · 1 评论 -
模拟退火算法
模拟退火算法一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所示:假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停原创 2015-01-20 10:16:07 · 1200 阅读 · 0 评论 -
遗传算法
遗传算法遗传算法 ( GA , GeneticAlgorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。原创 2015-01-20 10:26:28 · 1306 阅读 · 0 评论 -
动态规划-时间规整算法
DTW(Dynamic Time Warping,动态时间归整)算法,该算法基于动态规划(DP)的思想,解决了发音长短不一的模板匹配问题,是语音识别中出现较早、较为经典的一种算法。原创 2015-01-22 09:25:50 · 6442 阅读 · 0 评论 -
全部希腊字母读音-数学公式中常用
1 Α α alpha a:lf 阿尔法2 Β β beta bet 贝塔3 Γ γ gamma ga:m 伽马4 Δ δ delta delt 德尔塔5原创 2015-01-25 15:09:10 · 3472 阅读 · 0 评论 -
汉诺塔-递归算法深入理解
汉诺塔算法就3个步骤:第一,把a上的n-1个盘通过c移动到b;第二,把a上的最下面的盘移到c;第三,因为n-1个盘全在b上了。所以把b当做a重复以上步骤就好了。不过,思考过程还是很痛苦的,难以理解。递归中会保存数据的好处在这里又得到体现。递归算法真的是个神奇的东西,它会自己在栈中记录下以前的数据,可以按照以前的记录返回到起始点。(重点理解递归中局部变量的保存)汉诺塔代码转载 2015-04-16 21:52:09 · 664 阅读 · 0 评论 -
位操作
Title: 位操作基础篇之位操作全面总结Author: MoreWindowsE-mail: morewindows@126.comKeyWord: C/C++ 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大原创 2015-07-09 08:51:45 · 1634 阅读 · 0 评论 -
Dijkstra算法求最短路径(java)
任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式用OPEN,CLOSE表的方式,其采用的是贪心法的转载 2015-08-29 15:41:52 · 1081 阅读 · 0 评论 -
希尔排序-Java
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很原创 2015-09-29 12:11:08 · 604 阅读 · 0 评论 -
【小米笔试题】朋友圈问题-并查集解法
2016年小米校招笔试第三题(西安站)3 假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5,m = 3,r = {{1 , 2} , {2 , 3} , {4 , 5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1、2、3属于一个朋友原创 2015-10-17 17:46:18 · 1848 阅读 · 0 评论 -
希尔排序-Java<二>
希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分,第一部分,希尔排序介绍第二部分,如何选取关键字,选取关键字是希尔排序的关键第一块希尔排序介绍准备待排数组[6 2 4 1 5 9]首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组:[6 1]一组[2 5]二组[原创 2015-09-29 14:57:48 · 404 阅读 · 0 评论 -
【超易懂】并查集
一、适用的问题描述:某家族人口过于庞大,要判断两个是否是亲戚不容易。先给出已知的亲戚关系图,求任意给出的两人是否为亲戚关系。规定亲戚有传递性。样例输入/输出:6 5 3 (说明:6个人,5个亲戚关系,3组判断)1 21 53 45 21 31 4 Yes2 3 Yes5 6 No并查集图文解释:原创 2015-10-17 10:07:30 · 586 阅读 · 0 评论 -
回文串-Java
大家对回文串不陌生吧?一个字符串从前看和从后看如果一样的话,就是回文串。比如“上海自来水来自海上”就是一个回文串。现在我们的问题来了,把一个数字看成字符串,问它是不是一个回文数?这么简单的题目对想要成为小米工程师的你来说肯定不是问题。不过提醒一下哦:时间复杂度和空间复杂度越低的算法,得分越高。示例:12321 -> true 3 -> true 1原创 2015-10-01 18:05:18 · 706 阅读 · 0 评论 -
多项式输出-Java
求两个多项式乘积的问题相信大家在中学时经常碰到,它是这样的一个问题:pa=an*x^n + an-1*x^(n-1) + … + a1*x + a0pa=bm*x^m + bn-1*x^(m-1) + … + b1*x + b0其中,an, an-1, …,a0, bm, bm-1, … ,b0 都是整数,范围[-10000, 10000]。0pa*pb的结果也是一个多项式,请你编程来解决原创 2015-10-02 08:20:54 · 1708 阅读 · 0 评论 -
Java中单链表的实现
注释比较详细,直接上代码!package XiaoMi;import java.util.HashSet;import java.util.Set;public class SingleLinkList {//节点 class Element { //自定义数据结构 public Object value = null;原创 2015-10-03 17:22:40 · 616 阅读 · 0 评论 -
【小米笔试题】实现一个算法,确定一个字符串的所有字符是否全部不同
实现一个算法,确定一个字符串的所有字符是否全部不同。下面给出3种可行方法,都经过测试。(其中方法一,刚开始理解有些困难,需要多思考一下)package XiaoMi;import java.util.Arrays;public class test11 { /** * @param args */ public static void main(String[] ar原创 2015-10-05 10:55:27 · 1004 阅读 · 0 评论 -
Java-二分查找算法
注释比较详细,直接上代码package XiaoMi;import java.util.Scanner;public class test9 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan原创 2015-10-04 14:43:08 · 474 阅读 · 0 评论 -
【通俗讲解】BP神经网络
参考文章:http://www.jianshu.com/p/3d96dbf3f764David Rumelhart 和 J.McClelland 于1985年提出了BP网络的误差反向后传BP(Back propagation)学习算法BP算法基本原理利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计。原创 2017-11-26 09:26:25 · 9835 阅读 · 0 评论