
算法
文章平均质量分 79
L未若
难得糊涂!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
枚举法的简单心得
枚举法:百度百科的解释是:在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法.优点:算法简单,容易想到 缺点:时间复杂度高,运算量大,但是,但是,如果,我们能排除那些明显不属于题解的元素,在局部使用枚举,它的效果是相当非常好的。ps:下面两个问题均摘自百度,其中第二题的判断条件也是借鉴与原创 2015-11-30 20:29:37 · 5422 阅读 · 0 评论 -
有关海量数据的处理简单总结
本文转载与:http://my.oschina.net/winHerson/blog/209420第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法, 比如模1000,把整个大文件转载 2016-08-01 21:30:02 · 586 阅读 · 0 评论 -
递归的logN的优化(菲波那契数列,青蛙上台阶问题,母牛问题)!!!!
矩阵乘法 矩阵乘法是一种高效的算法可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法。矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。基本定义 它是这样定义转载 2016-07-21 10:03:19 · 1176 阅读 · 0 评论 -
二叉树的镜像 (剑指offer)!!!(两个有序链表的合并,链表的逆置)
面试题19:二叉树的镜像(来自《剑指Offer》)题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点的定义如下:[cpp] view plain copy print?struct BinaryTreeNode { int data; BinaryTreeNode *Left; BinaryTreeNod转载 2016-08-18 11:07:08 · 604 阅读 · 0 评论 -
atoi()函数的实现
atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回(返回转换后的整型数)。写atoi函数的时候需要注意一下几点1. 字符串前的空白2. 字符串所表示数值的正负号原创 2016-08-18 14:05:50 · 3068 阅读 · 0 评论 -
树中两个结点的最低公共祖先(剑指offer!!!)
面试题050】树中两个结点的最低公共祖先题目: 树中两个节点的最低公共祖先。 思路一: 输入两个树节点,求他们的最低公共祖先,——如果是二叉树,而且是二叉搜索树,那么是可以找到公共节点的。二叉搜索树都是排序过的,位于左子树的节点都比父节点小,而位于右子树上面的节点都比父节点大。如果当前节点的值比两个结点 的值都大,那么最低的共同的父节点一定是在当转载 2016-08-18 14:38:00 · 865 阅读 · 0 评论 -
只用位运算来实现整数的加减乘除四则运算 (转载,还没有来得及整理!!!!)
听同学百度二面中,不准用四则运算操作符来实现四则运算。一想就想到了计算机组成原理上学过的。位运算的思想可以应用到很多地方,这里简单的总结一下用位运算来实现整数的四则运算。首先回忆计算机组成原理学过的内容,数字在机器ALU运算逻辑单元内部是以补码形式进行运算的,因为补码有两个优势:1、能做到符号位和数值部分一起运算,这样无需单独考虑符号。2、能把减法运算转化为加法运算来处理。转载 2016-08-18 15:27:23 · 1115 阅读 · 0 评论 -
最长公共子序列问题 和 最长公共子串问题
问题描述:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列。 例如:X(A,B,C,B,D,A,B) Y(B,D,C,A,B,A) 那么最长公共子序列就是:转载 2016-08-18 15:38:50 · 812 阅读 · 0 评论 -
字符串(替换空格-剑指offer!!!)
C/C++中:每个字符串都以字符'\0'作为结尾,这样我们就能很方便的找到字符串的最后尾部。但是由于这个特 点,每个字符串中都有一个额外字符的开销,我们要防止越界 为了节省内存,C/C++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。我们来看看下面这个代码:#inc转载 2016-08-08 15:03:02 · 660 阅读 · 0 评论 -
牛客网-访问单个节点的删除
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class原创 2016-08-31 07:25:29 · 557 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。输入描述:输入为链表的表头输出描述:输出为需要打印的“新链表”的表头原创 2016-09-01 12:25:04 · 379 阅读 · 0 评论 -
递归函数时间复杂度分析
递归函数时间复杂度分析(1) 递归执行过程 例子:求N!。 这是一个简单的”累乘”问题,用递归算法也能解决。 n! = n * (n - 1)! n > 1 0! = 1, 1! = 1 n = 0,1 因此,递归算法如下: Java代码 fact(int n) { if(n == 0 || n == 1)转载 2016-09-23 00:55:25 · 2387 阅读 · 0 评论 -
算法的基本特性
1,排序的稳定性 简单的来说就是:能保证两个相等的数的前后序列在排序完成后序列位置相同,那么我们就说它是稳定的。 Ai = Aj,排序前:Ai在Aj之前 排序后:Ai还在Aj之前,那么当前这个算法是有效的 冒泡排序: 类似与水中上升的气泡越来越小,将小的往后调,比较相邻的两个元素。所以,如果两个元素相等,我想,我们是原创 2016-06-30 11:54:56 · 1588 阅读 · 0 评论 -
计数排序和基数排序和桶排序
本文转载于:http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html经典排序算法 - 计数排序Counting sort经典排序算法 - 计数排序Counting sort注意与基数排序区分,这是两个不同的排序计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长大体转载 2016-09-07 14:46:50 · 1881 阅读 · 0 评论 -
二叉树初解(度,确定型,二叉排序,平衡二叉)!!!
1,如何确定一颗二叉树(唯一)???2,二叉树度的问题(叶子节点与度为2的节点加1)???3,二叉排序树的插入,删除,简单理解4,平衡二叉树的构建过程,,,,原创 2016-07-20 10:57:14 · 2400 阅读 · 0 评论 -
外排序-多路归并
本文转载:http://www.cnblogs.com/huangxincheng/archive/2012/12/19/2824943.html说到排序,大家第一反应基本上是内排序,是的,算法嘛,玩的就是内存,然而内存是有限制的,总有装不下的那一天,此时就可以来玩玩外排序,当然在我看来,外排序考验的是一个程序员的架构能力,而不仅仅局限于排序这个层次。 一:N路归并排序转载 2016-08-01 21:27:55 · 7674 阅读 · 0 评论 -
一步一图一代码,一定要让你真正彻底明白红黑树 (July算法!!!)
一步一图一代码,一定要让你真正彻底明白红黑树 作者:July 二零一一年一月九日-----------------------------本文参考:I、 The Art of Computer Programming Volume III、 Introduction to Algorithms, Second EditionIII、The Annota转载 2016-07-21 19:16:40 · 2430 阅读 · 0 评论 -
从B 树、B+ 树、B* 树谈到R 树(转载)
本文转载自(写的真心太好了,,,,,):http://blog.youkuaiyun.com/v_JULY_v/article/details/6530142/从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部转载 2016-07-20 19:58:38 · 644 阅读 · 0 评论 -
深刻的理解递归汉诺塔(Hanoi)
算法:1, 从目标出发,我们将n个盘子从A移动到B通过C,假如我们这样写 hanoi(n, a, b, c);原创 2016-03-02 18:57:13 · 3215 阅读 · 0 评论 -
超经典的快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序转载 2016-03-03 16:33:09 · 442 阅读 · 0 评论 -
链表中删除节点引发的思考!!!
1,我们删除链表节点的时候,最常用的就是根据前趋节点,来改变指向,但是如果不用前趋节点,我们能删除吗??2,在链表中,删除节点的过程中,我们必须调用free函数吗??如果调用,它一定能正确的删除吗??如果不调用free 函数,那么它就一定不会删除吗??3,一个链表中,如果在输出具体存储的数据之前,我们用其他指针p指向某一个数据,然后我们在将指针p给free掉,会产生什么影响??如果我们f原创 2016-03-03 07:21:46 · 6770 阅读 · 5 评论 -
从头到尾解析Hash 表算法
作者:July、wuliming、pkuoliver (特别特别特别厉害啊!!!)出处:http://blog.youkuaiyun.com/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。-----------------------------------转载 2016-03-20 12:06:02 · 659 阅读 · 0 评论 -
简析归并排序
归并排序,其实质也就是分而治之(Divide and Conquer)+合而为一分而治之:1,对当前的这个序列,将其分成两个子序列(合理划分)2,分别查看子序列的原创 2016-03-11 11:17:37 · 568 阅读 · 0 评论 -
浅关堆排序
堆排序:1,将n个数的数列当作完全二叉树,构建大顶堆(或者小顶堆)2,将最顶部的最大值(大顶端)或者最小值(小顶堆)跟最后的值交换3,n = n - 1;(当n > 0),继续执行步骤(1,2),如果(n == 0 ),退出程序原创 2016-03-12 11:23:31 · 911 阅读 · 1 评论 -
PID算法浅析
首先帮大家解决一下什么是PID调节,为什么就要这样的疑惑。PID是比例,积分,微分的英文单词的首字母的简称。 下面举个例子说明一下PID,让大家有个感官的认识,。一个人闭眼走路,假设他知道自己离目的地有100米远,那么他就可以以每秒一米一步这样原创 2016-04-01 17:00:51 · 15488 阅读 · 2 评论 -
简单易懂的KMP,NEXT数组,BF算法(实例讲解)!!!
去了360面试,问了一个关于KMP的知识点,呀,完全忘了啊,太不应该了,然后就打算看看这个KMP,,,看了好多关于KMP算法的书籍和资料,总感觉没有说的很清楚,为什么会产生next数组,为什么给出了那么简短的程序,没有一个过程,而有的帖子虽然next及其字符串匹配说的很清楚,但是推理的一些过程相当复杂,比较抽象,今天在这里简单的提一下我的理解,尽可能的把这个过程讲的简单,原创 2016-05-10 09:19:53 · 2943 阅读 · 3 评论 -
基数排序
本文转载与:http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html#3350611【1】基数排序以前研究的各种排序算法,都是通过比较数据大小的方法对欲排数据序列进行排序整理过程。而基数排序却不再相同,那么,基数排序是采用怎样的策略进行排序的呢?简略概述:基数排序是通过“分配”和“收集”过程来实现排序转载 2016-06-30 00:52:07 · 805 阅读 · 0 评论 -
简单冒泡排序的时间复杂度及其两种优化
在我们写一些简单的程序中,对一组数据进行简单的有序的排列是经常会遇到的,所以我们必须熟悉几种基本的算法。而冒泡排序就是我们学习排序的基础冒泡排序:形象的可以理解为:水中上升的气泡,在上升的过程中,气泡越来越小,不断比较相邻的元素,将小的往后调原创 2016-07-01 19:21:45 · 6676 阅读 · 1 评论 -
二维数组的查找(剑指offer)
数组: 可以说是最简单的一种数据结构,它占据一块连续的内存并按照顺序存储数据.创建数组时:我们需要首先制定数组的容量的大小,然后根据大小分配内存.即使我们只在数组中存储一个数字,也需要为所有的数据预先分配内存.因此数组的空间效率不是很好,经常会有空闲的区域没有得到充分的利用..... 由于数组中的内存都是连续的,于是我们可以根据下标在O(1)时间(直接检索下标获得存储的数据转载 2016-08-03 13:53:26 · 507 阅读 · 0 评论 -
两个链表的第一个公共节点(剑指offer)
题目:输入两个链表,找出它们的第一个公共节点.链表节点定义如下:struct ListNode{ int m_key; ListNode* m_pNext;}面试的时候,碰到这道题,我们的第一反应蛮力法:在第一个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点,如果在第二个转载 2016-08-03 13:52:30 · 528 阅读 · 0 评论 -
算法的简单概况
1. 字典树(单词搜索树) Trie是个简单但实用的数据结构,通常用于实现字典查询。我们做即时响应用户输入的AJAX搜索框时,就是Trie开始。本质上,Trie是一颗存 储多个字符串的树。相邻节点间的边代表一个字符,这样树的每条分支代表一则子串,而树的叶节点则代表完整的字符串。和普通树不同的地方是,相同的字符串前 缀共享同一条分支。还是例子最清楚。给出一组单词,inn, int, a原创 2016-08-03 14:30:18 · 1742 阅读 · 0 评论 -
旋转数组的最小数字(剑指offer)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 这道题的直观解法并不难,从头到尾遍历数组一次,我们就能找出最小的元素.这种思路的时间复杂度显然是O(N).但是这个思路没有利用输入旋转数组的特性,肯定达不到面转载 2016-08-03 17:33:47 · 461 阅读 · 0 评论 -
图
1,图(Graph)是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G(V,E), 其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合 1,线性表中我们把数据元素叫元素,树中将数据元素叫节点,在图中数据元素, 我们则称之为顶点(Vertex) 2,线性表中可以没有数据元素,称为空表.数中可以没有节点,叫做空树.但是对于图而言,原创 2016-08-30 08:48:04 · 1703 阅读 · 0 评论