算法分析
文章平均质量分 67
jackycmu
我要成为一个优秀的googler
展开
-
转自matrix67.com-从零开始学算法:十种排序算法介绍(中)
本文被华丽的分割线分为了四段。对于O(nlogn)的排序算法,我们详细介绍归并排序并证明归并排序的时间复杂度,然后简单介绍堆排序,之后给出快速排序的基本思想和复杂度证明。最后我们将证明,O(nlogn)在理论上已经达到了最优。学过OI的人一般都学过这些很基础的东西,大多数OIer们不必看了。为了保持系列文章的完整性,我还是花时间写了一下。 首先考虑一个简单的问题:如何在线性的时间内将转载 2013-12-31 11:16:31 · 741 阅读 · 0 评论 -
过度热情计算(转)
http://cuitianyi.com/blog/%E8%BF%87%E5%BA%A6%E7%83%AD%E6%83%85%E8%AE%A1%E7%AE%97/在Mark Allen Weiss的《数据结构与算法分析:C语言描述》中有这样一道习题(3.22a)。大意是扩展Stack这种数据结构,让它除了支持通常意义下的Push和Pop以外还要支持一个GetMin操作(取当前栈中的最小元素转载 2014-05-07 08:51:02 · 529 阅读 · 0 评论 -
一道01背包问题(动态规划)
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你原创 2014-05-07 02:17:10 · 701 阅读 · 0 评论 -
twitter电面题目 - 同色最大联通子图
Given:1. A graph contains red and blue nodes2. Each node has up between 1 and n neighbors3. Find the largest connected network of a given color, e.g. redR1 - B2 - B3 - R5| | | |原创 2014-05-15 14:01:56 · 1278 阅读 · 0 评论 -
stl里关于heap的函数与priority_queue的区别
大家都知道,priority_queue是用堆实现的,可以通过重载原创 2014-05-17 02:17:06 · 3019 阅读 · 0 评论 -
“至少出现一次7”的数
给定一个正整数n,写一个算法计算从1到n之间有多少“至少出现一次7”的数。例如n=20,那么有两个出现7的数:7,17。原创 2014-05-10 10:33:35 · 653 阅读 · 0 评论 -
qsort函数、sort函数 (精心整理篇)
qsort函数、sort函数 (精心整理篇)先说明一下qsort和sort,只能对连续内存的数据进行排序,像链表这样的结构是无法排序的。首先说一下, qsortqsort(基本快速排序的方法,每次把数组分成两部分和中间的一个划分值,而对于有多个重复值的数组来说,基本快速排序的效率较低,且不稳定)。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决排序这个问题。所谓三路转载 2014-05-10 10:46:52 · 462 阅读 · 0 评论 -
递归的力量!!
递归是一门艺术,越是用的多,越是觉得递归不但威力无穷,还原创 2014-05-17 15:05:13 · 594 阅读 · 0 评论 -
动态规划-最后剩下的是红糖的概率问题
有m个红糖,n个白糖,每次原创 2014-05-09 01:23:02 · 708 阅读 · 0 评论 -
动态规划 - 之 - 矩阵链式乘法数
这也是个google的面试题,题目描述如下():假定有一组矩阵需要做乘法操作。但是我们知道首先矩阵乘法满足了结合律。所以可以按照不同的顺序做乘法。而且不同顺序做乘法最后的乘法次数是不同的。比如〈A1, A2, A3〉分别是10 × 100, 100 × 5, 和 5 × 50。如果按照((A1 A2) A3)的顺序来计算,就是7500次,但是如果(A1 (A2 A3))这样的顺序,那结果就转载 2014-05-14 08:24:57 · 965 阅读 · 0 评论 -
动态规划--项目安排
题目来源:网易有道2013年校园招聘面试二面试题题目描述:小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的转载 2014-05-14 04:36:38 · 720 阅读 · 0 评论 -
动态规划 - 最长递增子序列
对一个子序列{1, 9, 3, 8, 11, 4, 5, 6, 4, 19, 7, 1, 7 }这样一个字符串的的最长递增子序列就是{1,3,4,5,6,7}或者{1,3,4,5,6,19}原创 2014-05-14 07:43:59 · 538 阅读 · 0 评论 -
14 numbers every developer should know
Jeff Dean , a famous Google engineer, popularized a list of latency numbers everyone should know. The list is a great resource for designing large scale infrastructure systems.Algorithms and the转载 2014-06-07 10:41:56 · 568 阅读 · 0 评论 -
每个计算机工程师都应该知道的数字列表
L1 cache reference: 0.5 nsBranch mispredict: 5 nsL2 cache reference: 7 nsMutex lock/unlock: 100 nsMain memory reference: 100 nsCompress 1K bytes with Zippy: 10,000 nsSend 2K bytes over 1 G转载 2014-06-07 10:57:54 · 958 阅读 · 1 评论 -
[Leetcode新题] Maximum Gap
题目: https://oj.leetcode.com/problems/maximum-gap/这一题用到了鸽笼原理,是非常经典的一道题。因为代码注释的非常详细,写的逻辑也比较清楚,复习的时候应该不会看不懂。class Solution {public: int maximumGap(vector &num) { int size = num.size(), m原创 2015-01-08 06:21:44 · 725 阅读 · 0 评论 -
蛇与梯子
原创 2014-05-01 12:37:48 · 1246 阅读 · 0 评论 -
用stl的binary_search写Search a 2D Matrix
不得不说STL太好用了,二分搜索都class Solution {public: bool searchMatrix(vector > &matrix, int target) { int n = matrix.size(); if(n == 0) return false; int m = matrix[0].size();原创 2014-05-02 04:59:54 · 458 阅读 · 0 评论 -
转自matrix67.com-从零开始学算法:十种排序算法介绍(上)
出处:http://www.matrix67.com/blog/archives/166给出n个数,怎样将它们从小到大排序?下面一口气讲三种常用的算法,它们是最简单的、最显然的、最容易想到的。选择排序(Selection Sort)是说,每次从数列中找出一个最小的数放到最前面来,再从剩下的n-1个数中选择一个最小的,不断做下去。插入排序(Insertion Sort)是,每次从数列中取一个转载 2013-12-31 03:33:12 · 758 阅读 · 0 评论 -
红黑树 vs 最小堆
出处:http://blog.sina.com.cn/s/blog_56e6a0750101b0fo.html不谈内存,从算法上来讲红黑树插入是最坏情况要比较2logN次(最高的高度)外加不超过两次旋转,最小堆最坏情况是logN次红黑树删除不需要比较只需要不超过3旋转,查找最小值需要遍历logN,如果删除最小值树调整一般很小最小堆查询顶节点是O(1),而删除顶节点在任何情况下都转载 2013-12-31 08:17:36 · 1782 阅读 · 0 评论 -
关于二叉堆、优先级队列、AVL TREE和RB TREE的总结
1. 从一个大牛博客里摘了一段对AVL的评论AVL树的插入和删除操作是它很普遍的操作,我从一些文章上看到都说它的删除操作机及其复杂,但是这个世界上难道还有比毁灭更简单的事情吗?avl删除的善后处理真的比插入一个节点还要复杂吗?经过我的百般蹂躏,avl树终于向我展示了冰山的下面到底隐藏着什么。 AVL树要求的平衡条件是左右子树的高度差不能大于1,于是为了跟踪平衡性,引入了一个平衡因子的概念,原创 2013-12-31 08:56:28 · 1065 阅读 · 0 评论 -
转自matrix67.com-从零开始学算法:十种排序算法介绍(下)
那么,有什么方法可以不用比较就能排出顺序呢?借助Hash表的思想,多数人都能想出这样一种排序算法来。 我们假设给出的数字都在一定范围中,那么我们就可以开一个范围相同的数组,记录这个数字是否出现过。由于数字有可能有重复,因此Hash表的概念需要扩展,我们需要把数组类型改成整型,用来表示每个数出现的次数。 看这样一个例子,假如我们要对数列3 1 4 1 5 9 2 6 5 3 5转载 2013-12-31 12:39:13 · 614 阅读 · 0 评论 -
世界上最快的排序算法
偶然间得到这一程序,不敢独享,愿与大家一同研究这个排序号称最差时间是O(n log log n),以基数排序为主轴,混合用了多种排序方法,构造了这个史上最快的排序。还没细看,回头慢慢看吧。/* Revised 11 oct 1999: No changes have been made to the code only the comments have b原创 2014-01-06 08:23:29 · 3493 阅读 · 0 评论 -
平摊分析(Amortize Analysis)
对于一个操作的序列来讲,平摊分析(Amortize Analysis)得出的是在特定问题中这个序列下每个操作的平摊开销。 一个操作序列中,可能存在一、两个开销比较大的操作,在一般地分析下,如果割裂了各个操作的相关性或忽视问题的具体条件,那么操作序列的开销分析结果就可能会不够紧确,导致对于操作序列的性能做出不准确的判断。用平摊分析就可以得出更好的、更有实践指导意义的结果。因为这个操作序列中转载 2013-12-24 02:32:54 · 1295 阅读 · 0 评论 -
毒药与老鼠-程序实现
有 N个一模一样的瓶子,其中有 N-1瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。问你需要有多少只小白鼠和一星期的时间,来检验出哪个瓶子里有毒药?怎么检验?编程实现检验过程。编程思路:设瓶子个数为N,根据我另一篇博文可知老鼠不能少于ceiling(log(N))只,首先编程得到老鼠的数量K,然后模拟老鼠吃药的过程,最后根据老鼠的死亡情况可以得到瓶子的编号。#原创 2013-12-25 12:34:25 · 980 阅读 · 0 评论 -
[收集]大量常用的Hash算法
/*** Hash算法大全* 推荐使用FNV1算法* @algorithm None* @author Goodzzp 2006-11-20* @lastEdit Goodzzp 2006-11-20* @editDetail Create*/public class HashAlgorithms{ /**//** * 加法hash转载 2014-01-19 05:46:45 · 754 阅读 · 0 评论 -
用java计算文件MD5(文件hash)
distributed system的第一个实验需要提供这个功能,即如果一个配置文件改变了,在收发信息的时候就要按照新的配置文件的规则进行收发那么如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同。比较常用的文件hash算法有MD5和SHA-1public static void main(St原创 2014-01-19 09:40:03 · 8734 阅读 · 0 评论 -
常见hash算法的原理
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列转载 2014-01-19 05:36:23 · 495 阅读 · 0 评论 -
一道面试题 - 找最长固定unique个数的子串
解法:用map记录当前的unique数,扫描一遍/*扫描的时候,如果unique数不超过,则继续从右边添加,否则从左边持续删除,直到unique数回到正常的水平*/int getLen(vector num, int unique) { int left, right, len = num.length(); int max_len = 0; left = right = 0;原创 2014-01-21 05:36:19 · 624 阅读 · 0 评论 -
英特尔多核平台编程优化大赛报告
前言本次优化使用的CPU是Intel Xeon 5130 主频为2.0GHz 同Intel酷睿2一样是基于Core Microarchitecture 的双核处理器。本次优化在Intel的工具帮助下主要针对Core Microarchitecture 系列处理器进行优化。但是由于未知原因,Intel VTune Analyzers并不能在该系统下正常工作。所以,所有使用Intel VTune转载 2014-02-04 09:34:24 · 856 阅读 · 0 评论 -
怎么样求下一个2的幂
在how to write fast code课上,老师展示了一段怎么样求下一个2的幂的代码,比如输入是1000,返回1024,输入9,返回16等等int nextPowerOfTwo(int n) { n--; n = n >> 1 | n; n = n >> 2 | n; n = n >> 4 | n; n = n >> 8 | n;原创 2014-02-24 09:49:38 · 659 阅读 · 0 评论 -
基于C++模板的二分查找
自己实现了一个二分查找原创 2014-05-02 05:04:45 · 692 阅读 · 0 评论 -
一个google的面试题 计算两个整数相除
Divide number and return result in form of a string. e.g 100/3 result should be 33.(3) Here 3 is in brackets because it gets repeated continuously and 5/10 should be 0.5.原创 2014-05-13 13:08:05 · 997 阅读 · 2 评论