
algorithms
亲密数
我从事通信行业的软件开发工作,已经超过10年,至今对信息技术仍充满热情。
我参与过GSM、WCDMA、IMS、LTE等几代网络的网元和协议的开发。我有在Linux、Windows及云计算平台上的应用开发经验。我对几种编程范式如面向过程、面向对象及函数式编程等有一定的理解。我使用过多种编程语言进行开发,如C/C++、Java、Python、Go等。同时我对互联网相关技术如HTML、CSS、Javascript等也感兴趣。我也具有一定的用R或Python进行数据分析的技能。
业余时间我喜欢看数学、文学、历史等方面的书籍。总体而言我是个热爱技术、乐于学习的技术人员。
展开
-
列出Ftp中所有文件夹和文件
给定Ftp的IP地址、用户名和密码,列出其中所有文件夹和文件。# python ftpdir.py import ftplibimport sysdef lineCallBack(line): global lines lines.append(line) def getFileName(aname): names=aname.split() if len原创 2008-04-16 16:35:00 · 1904 阅读 · 0 评论 -
AVL Tree 学习笔记
AVL树的原理与实现原创 2010-10-24 18:57:00 · 1265 阅读 · 1 评论 -
组合(Combination)
重学算法-组合(Combination)1.背景上一篇介绍了枚举排列元组的方法,本篇介绍枚举组合元组的方法。上一篇介绍的枚举排列元组的方法实际是枚举的P(n,n)的元组,而不是通用的P(n,r)。但是本篇介绍完枚举组合元组C(n,r)的方法后,就可以根据公式P(n,r)=C(n,r)*P(r,r)很容易地实现枚举P(n,r)排列元组的方法了。2.算法步骤假定有0,1,...原创 2008-03-05 14:10:00 · 1882 阅读 · 0 评论 -
回溯法
重学算法-回溯法1.背景解决n皇后问题常用的方法是回溯法。回溯法本质上也是遍历所有解空间的方法。下面就以n皇后问题为例,介绍回溯法。2.例子n皇后问题。在n×n棋盘上放置n个皇后,使她们不会互相攻击。3.算法思想用回溯法有几个条件。(1)解的空间是已知的。(2)每个解都有判定条件。(3)每个解都有规模。以n皇后问题为例:(1)解的空间是1,2,...,n原创 2008-03-15 17:07:00 · 726 阅读 · 0 评论 -
桶排序与带循环的算法时间复杂度分析
在计算算法的时间复杂度时,我们一般采用BigO函数。BigO函数中只保留最有价值的函数组成部分,去掉系数,去掉常数。例如:O(a*n^2+b*n+1)=O(n^2)。同时我们在算法分析时会尽量选择最接近的BigO函数。比如快速排序(QuickSort)和归并(MergeSort)原创 2011-09-09 22:24:41 · 3104 阅读 · 1 评论 -
排列(Permutation)
1.背景排列和组合是组合数学中的基本算法。求排列组合的计数有现成的公式,P(n,r)=(n!)/((n-r)!),C(n,r)=P(n,r)/(r!)。在利用排列组合求解计数问题的时候,可以直接应用公式。但有时我们需要枚举出排列或组合的每一个元组。本篇只考虑枚举排列算法,且只考虑全排列。待给出枚举组合算法后,通过组合算法和全排列算法,可以容易得出枚举任意排列的算法。枚举排列的每一个原创 2008-02-26 12:39:00 · 1546 阅读 · 0 评论 -
Longest Repeated Substring
I wrote the a program to get the Longest Repeated Substring of a string. I think the way I used should be Dynamic Programming. The basic steps are:1) First find all Repeated Substrings with only one c原创 2011-06-29 17:53:00 · 1606 阅读 · 0 评论 -
堆:左倾树
堆是一种树型数据结构,一般组织成二叉树的形式。堆具有这样的属性,对于每一个节点,父节点上的元素大于子孙节点。具体实现可以用链表,也可以用数组。优先队列(Priority Queue)可以用堆来实现。下面介绍一种左倾树(Leftist Tree)的实现方式,参考Algorithms:a functional programming approach. 左倾树首先是堆,具有堆的属性。左倾树的每原创 2011-06-26 23:13:00 · 1398 阅读 · 0 评论 -
打印螺旋数列
在网上看到一题,打印螺旋数列。给定n,螺旋数列包含n*n个元素,排列在n*n的矩形内。1至n*n的整数由外向内螺旋增加。原创 2011-05-03 23:45:00 · 1223 阅读 · 0 评论 -
tail recursive
Followed 3 functions written in Haskell language, which are fac1, fac2 and fac3. They are all for calculating factorial. The performance of them are different. fac1 10000 takes (0.97 secs, 10469原创 2011-06-19 20:16:00 · 1039 阅读 · 0 评论 -
Get middle element of a linked-list
Suppose therere odd number of elements in a linked-list, how to get the middle element in it? I find a clever way to achieve this on internet. Two pointers point to the linked-list. One is slow point原创 2011-06-19 01:52:00 · 818 阅读 · 0 评论 -
How to compare linked-lists?
We say two linked-lists are equal if they have the same number of elements, and the elements themselves are the same. Furthermore elements order are not significant. If compared linked-lists are原创 2011-06-09 17:20:00 · 648 阅读 · 0 评论 -
用递归实现全排列
前面的文章曾用非递归的方法实现过全排列。本文用递归的方法实现全排列。(摘自计算机算法设计与分析)设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}。集合X中元素的全排列记为Perm(X)。(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的全排列。R的全排列可归纳定义如下: 当n=1时,Perm(R)=(r),其中r是集合R中唯一的转载 2009-07-22 19:55:00 · 1196 阅读 · 1 评论 -
循环队列
实现循环队列。假如循环队列的max_size为n,那么此种方法最多可以存储n-1个元素。用( (tail+1) % max_size) == head判断队满。用head == tail判断队空。 typedef int DATATYPE;class CycleQueue{private: int head; int tail; int max_size;原创 2009-04-16 22:43:00 · 724 阅读 · 0 评论 -
Find factors' count of a Number
这个算法的目的是求一个数因数的个数。算法原理是先求出质因数的个数。假设这个数是x。p1,p2,...pn是x的质因数。则x=p1y1*p2y2*p3y3*...*pnyn 。那么根据乘法原理,x的因数的个数就是(y1+1)*(y2+1)*...*(yn+1)。//the result is 76576500 using System.Collections.Generic;原创 2008-11-11 14:45:00 · 660 阅读 · 0 评论 -
Find all prime factors of a number
此算法的目的是求一个数的所有质因数。不是最优的。 def factors(num): fac=[] i=2 while i<num: if num % i == 0: if fac.count(i)==0: fac.append(i) num=num /原创 2008-10-24 14:44:00 · 739 阅读 · 0 评论 -
女护士
问题“医院里的医务人员,包括我在内,总共是16名医生和护士。下面讲到的人员情况,无论是否把我计算在内,都不会有任何变化。在这些医务人员中:(1)护士多于医生。(2)男医生多于男护士。(3)男护士多于女护士。(4)至少有一位女医生。”这位说话的人是什么性别和职务?分析因为是小规模问题,适合用暴力破解法。枚举所有情况,找出符合规则的。此类问题都可以用这种方法。原创 2008-04-17 15:32:00 · 1656 阅读 · 0 评论 -
用递归和非递归两种办法计算Hanoi问题
递归方法就是通常的方法。非递归方法是:循环移动最小的盘子,然后再移动不包括最小盘子的两根杆上的盘子(比较大小),直到结束。根据移动盘子个数是奇数或偶数确定先移动到那个杆上,是123循环,还是321循环,详情见程序。// Hanoi.cpp : Defines the entry point for the console application.// #include "stdafx.h"原创 2008-04-16 15:44:00 · 2756 阅读 · 0 评论 -
鸽巢原理及应用
利用鸽巢原理解题原创 2010-10-08 20:29:00 · 2787 阅读 · 0 评论