代码改变世界

如何选择开源项目

2012-08-11 14:15 by coodoing, 617 阅读, 1 推荐, 收藏, 编辑
摘要:引用自:http://program-think.blogspot.com/2009/02/how-to-choose-opensource-project.html 近几年开源项目越发普及,很多商业软件都逐渐引入开源项目。由于我负责的产品线采用了不少开源项目(主要是C++、Java、Python),这几年就经常会碰到开源项目选型的问题(从几个具有类似功能的开源软件项目中... 阅读全文

Python性能鸡汤

2012-08-11 13:45 by coodoing, 357 阅读, 0 推荐, 收藏, 编辑
摘要:第一部分 阅读 Zen of Python,在Python解析器中输入 import this. 一个犀利的Python新手可能会注意到"解析"一词, 认为Python不过是另一门脚本语言. "它肯定很慢!" 毫无疑问:Python程序没有编译型语言高效快速. 甚至Python拥护者们会告诉你Python不适合这些领域. 然而,YouTube已用Python服务于每小时4千万视频的请求.... 阅读全文

Options for Storing Hierarchical Data in a Relational Database

2012-08-10 22:59 by coodoing, 977 阅读, 0 推荐, 收藏, 编辑
摘要:Good OverviewsGenerally speaking you're making a decision between fast read times (e.g. nested set) or fast write times (adjacency list). Usually you end up with a combination of the options below that best fit your needs. The following provides some in depth reading:One more Nested Intervals vs 阅读全文

蓄水池抽样 - Reservoir Sampling

2012-08-10 17:08 by coodoing, 1044 阅读, 0 推荐, 收藏, 编辑
摘要:蓄水池抽样一般用于海量数据不知道总数只能遍历一次随机抽样问题。第一部分:问题描述 问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random line, whe. 阅读全文

【转】求质数算法的N种境界- 试除法和初级筛法

2012-08-10 12:49 by coodoing, 610 阅读, 0 推荐, 收藏, 编辑
摘要:转帖:http://program-think.blogspot.com/2011/12/prime-algorithm-1.html★引子 前天,俺在《俺的招聘经验[4]:通过笔试答题能看出啥?》一文,以"求质数"作为例子,介绍了一些考察应聘者的经验。由于本文没有政治敏感内容,顺便就转贴到俺在CSDN的镜像博客。 昨天,某个CSDN网友在留言中写道:老实说,这个程序并不好写,除非你背过这段代码 如果只在纸上让别人写程序,很多人都会出错 但是如果给一台电脑,大多数人都会把这个程序调试正确 出这个题目没啥意义 只能让别人觉得你出题水平低 首先,... 阅读全文

[续]全排列的非递归实现

2012-08-10 09:04 by coodoing, 885 阅读, 0 推荐, 收藏, 编辑
摘要:前文提到过全排列的递归实现,这里在简单的介绍下全排列的非递归实现。 以6个数字的全排列为例说明,相当于用1,2,3,4,5,6 构造一个六位数,每一位上取一个数,这样一共有6!中方法。 很显然,这6!个数是有大小的,如果按从小到大排列,示意如下: 1 2 3 4 5 6 1 2 3 4 6 5 1 2 3 5 4 6 ………… ... 阅读全文

【转】架构系列-Microsoft Azure存储架构设计

2012-08-09 22:59 by coodoing, 461 阅读, 0 推荐, 收藏, 编辑
摘要:本文链接地址: http://www.nosqlnotes.net/archives/83 SQL Azure简介 SQL Azure是Azure存储平台的逻辑数据库,物理数据库仍然是SQL Server。一个物理的SQL Server被分成多个逻辑分片(partition),每一个分片成为一个SQL Azure实例,在分布式系统中也经常被称作子表(tablet)。和大多数分布式存储系统一样,... 阅读全文

【转】堆,栈区别

2012-08-09 17:12 by coodoing, 360 阅读, 0 推荐, 收藏, 编辑
摘要:非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!第一部分:堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 : 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化... 阅读全文

尾递归

2012-08-09 16:19 by coodoing, 460 阅读, 1 推荐, 收藏, 编辑
摘要:在传统递归方法中,每次重复的过程调用都使得调用链条不断加长. 系统不得不使用栈进行数据保存和恢复。如果单项链表十分长,那么上面这个方法就可能会遇到栈溢出,也就是抛出StackOverflowException。这是由于每个线程在执行代码时,都会分配一定尺寸的栈空间(Windows系统中为1M),每次方法调用时都会在栈里储存一定信息(如参数、局部变量、返回地址等等),这些信息再少也会占用一定空间,成千上万个此类空间累积起来,自然就超过线程的栈空间了。而尾递归就不存在这样的问题。 尾递归相对传统递归,其是一种特例。在尾递归中,先执行某部分的计算,然后开始调用递归,所以你可以得到当前的计算结果,而. 阅读全文

【转】海量数据处理

2012-08-08 16:35 by coodoing, 797 阅读, 0 推荐, 收藏, 编辑
摘要:1、何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群, 阅读全文

【转】从Trie树(字典树)谈到后缀树

2012-08-08 16:33 by coodoing, 975 阅读, 0 推荐, 收藏, 编辑
摘要:本文第一部分,咱们就来了解这个Trie树,然后自然而然过渡到第二部分、后缀树,接着进入第三部分、详细阐述后缀树的构造方法-Ukkonen。第一部分、Trie树1.1、什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 它有3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。. 阅读全文

快速排序及优化

2012-08-06 17:27 by coodoing, 1172 阅读, 0 推荐, 收藏, 编辑
摘要:快速排序(Qucik Sort)可以说是应用最广泛的排序算法之一。它的基本思想是分治法:选择一个pivot(中轴点),将小于pivot放在左边,将大于 pivot放在右边,针对左右两个子序列重复此过程,直到序列为空或者只有一个元素。实现快速排序的具体过程如下(采用左端点做pivot(《算法导论》):数组划分:Partition(关键,它对数组A[p..r]进行就地重排:将小于pivot放在左边,将大于 pivot放在右边)具体算法实现:quickSort(int[] arr, int low, int high) 1: static void quickSort(int[] arr, i... 阅读全文

归并排序

2012-08-05 19:41 by coodoing, 407 阅读, 0 推荐, 收藏, 编辑
摘要:1、算法介绍 归并排序(Merging Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的;然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。2、算法动画演示3、算法步骤1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列。2、设定两个指针,最初位置分别为两个已经排序序 阅读全文

【转】计算机科学经典论文

2012-08-04 22:19 by coodoing, 415 阅读, 1 推荐, 收藏, 编辑
摘要:从Jao的Programming Musing 看到的:Babar Kazar 整理了一堆经典论文。Jao强烈建议每个严肃的程序员读每篇论文,说它们都或多或少有意思。粗粗扫了一下,很多论文都没读过。挑了些俺多少知道一点的介绍。· An axiomatic basis for computer programming C. A. R. Hoare Tony Hoare名下的公理化语义(Axiomatic Semantics)。著名的Hoare Triples, P{C}Q, 就是从这里来的。论文不长,双列6页。前辈们就是这样的,6页纸就能开宗立派。不像俺,6页纸连介绍部分都写不周全。哪 阅读全文

计数排序,基数排序和桶排序

2012-08-04 20:11 by coodoing, 12686 阅读, 2 推荐, 收藏, 编辑
摘要:计数排序,基数排序,桶排序等非比较排序算法,平均时间复杂度都是O(n)。这些排序因为其待排序元素本身就含有了定位特征,因而不需要比较就可以确定其前后位置,从而可以突破比较排序算法时间复杂度O(nlgn)的理论下限。计数排序(Counting sort) 计数排序(Counting sort)是一种稳定的排序算法。计数排序是最简单的特例,由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存,适用性不高。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。. 阅读全文

位图法

2012-08-04 13:26 by coodoing, 1411 阅读, 0 推荐, 收藏, 编辑
摘要:判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上1。如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在... 阅读全文

堆排序

2012-08-03 17:12 by coodoing, 877 阅读, 0 推荐, 收藏, 编辑
摘要:1、堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 (2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 大顶堆和小顶堆 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。 注意: ①堆中... 阅读全文

分支限界法-01背包问题

2012-08-02 22:47 by coodoing, 37244 阅读, 4 推荐, 收藏, 编辑
摘要:1、分支限界法介绍 分支限界法类似于回溯法,也是在问题的解空间上搜索问题解的算法。一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出解空间中满足约束条件的所有解;而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 由于求解目标不同,导致分支限界法与回溯法对解空间的... 阅读全文

回溯算法-01背包问题

2012-08-02 19:10 by coodoing, 4091 阅读, 0 推荐, 收藏, 编辑
摘要:1、问题描述 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。 2、算法分析 0-1背包问题是子集选取问题。一般情况下,0-1背包问题是NP难的。0-1... 阅读全文

动态规划-01背包问题

2012-08-02 19:05 by coodoing, 1310 阅读, 0 推荐, 收藏, 编辑
摘要:1、问题描述 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包容量为c。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。因此,该问题称为0-1背包问题。 2、算法分析 0-1背包问题的最优子结构,设(y1,y2,...,yn)是所给0-1背包... 阅读全文