- 浏览: 40806 次
- 性别:
- 来自: 上海
最新评论
-
wuyufeixue:
ELFHash 算法 -
SCYForce:
dmhorse 写道你好,请问能供SunSpot一套东西玩一下 ...
Wireless Sensor Network-Sunspot开发之搭建开发平台+第一个作业 -
dmhorse:
你好,请问能供SunSpot一套东西玩一下吗?不是对SunSp ...
Wireless Sensor Network-Sunspot开发之搭建开发平台+第一个作业 -
cywhoyi:
非常感谢
算法笔记(第二部分)-- 图算法之Dijkstra最短路径算法 -
hacer9791:
以下是对冒泡排序的一点优化:减少了外层循环的次数
publ ...
算法笔记(第一部分)-- 排序之白话冒泡排序
文章列表
最近组里有点小忙,用公司自己的Force.com平台写的Customer Support应用刚刚Pilot,在做Code Refactoring。今天又被分配一个任务要在一个页面里嵌入另一个页面,如果这两个页面在同一个域名下的话,很容易或者子页面的ScrollHeight就可以 ...
Dijkstra算法由著名的荷兰计算机科学家Dijkstra于1959年提出(这位老人家已于2002年过世,过世前任教于University Of Texas,Austin)。简单的说,这个算法解决的就是对于图中的任意一个节点,求出该点到其他节点的最短路径。
Dijkstra算法过程:
1. 创建一个节点之间的距离表,一个目标节点上一个节点表,一个访问过的节点表和一个当前节点。
2. 初始化距离表值,初始节点设为0,其他设为无穷大。
3. 所有访问过的节点表中的值设为“false”。
4. 将目标节点上一个节点链表中的值设为“undefined”。
5. 当前节点设置为初始节点。
6. 将当前 ...
计算机科学总的来说,前20的CS可以分成三类:
一、4个最为优秀的CS Program: Stanford, UC. Berkeley, MIT, CMU
二、6个其他前10的: UIUC, Cornell, University of Washington,Princeton, University of Texas-Austin 和 University of Wisconsin-Madison, 其中 ...
- 2008-09-13 13:32
- 浏览 2071
- 评论(0)
忙碌的暑假已经过去,在学校最后一年的学习开始了,这个学期选了一门Special Topic-Wireless Sensor Network,很新的领域,Paper貌似都是从2004年开始的。
可恶的老师让我们下周就要交第一个作业,不得不开始搭建平台。这次我们用的是Sun公司的Sunspot产品,2个Wireless Spot,1个Base Station(这套Dev Kit价值$750,老师说如果学期结束的时候不能按时归还的话,就没成绩)。开发的主要过程就是写好程序,用Ant编译,部署到Spot上面,然后就可以玩了。这东西也算是嵌入式的一种吧,用的自然是是Sun的Api。Website: ht ...
ANTLR 之父-Terence John Parr
http://www.cs.usfca.edu/~parrt/
“自1980年以来,我手工编写了大量语言识别和翻译的代码,机械的过程让我开始尝试将这个过程自动化。”ANTLR之父--Terence John Parr 在ANTLR的介绍中如是说。分析器的自动化是 ...
- 2008-09-11 12:42
- 浏览 2316
- 评论(0)
堆排序是一种基于比较的排序算法,它比实现的较好的快速排序慢一些,但是它的平均时间复杂度为O(nlogn),空间复杂度为О(n),它是一种in-place的算法,但是却是不稳定的排序算法。
最大堆与最小堆的定义:
根结点(亦称为堆顶 ...
归并排序是一种基于比较的排序算法,在多数的实现方法下它是稳定的。归并排序可是由计算机祖师级人物-冯 诺依曼提出的哦。
归并排序的过程:
1. 如果数据链表的长度为0或1,则返回
2. 将原始数据链表对半分成两个子链表
3. 对每个子链表递归的调用合并排序进行排序
4. 合并两个子链表使其成为一个排序完成的链表
归并排序的时间复杂度为О(nlogn),空间复杂度为О(n)。
归并排序的动画:
归并排序代码-mergesort:
public int[] mergeSort(int[] data){
if(data.length<=1)
...
记得今年暑假找实习的时候,去过一家小公司Xoopit做On-Site interview,里面有个工程师给我出了一道Hardcode的问题:给定一个无序数组,以及一个数组中的元素,要求输出的数组中小于这个数的数都有序的排在它之前,大于它的数都有序的排在它之后。当时想了半天才写出一个很烂的解法。最近重新复习排序,发现这不就是典型的Quick Sort的应用么。
快速排序的步骤:
1. 从数组中选出一个中枢数(pivot)
2. 重新排列该数组,让数组中比该数小的数都排在该数的前面,比该数大的数都排在该数的后面。经过这次排列,该数处于其最终位置,并将原数组分为了两个子数组(大于它的数组和小于它的数 ...
上个学期上Distributed Software Development的时候,最后一个项目实现Distributed Hashtable,需要对文件名字符串进行Hash处理,用到了一个经典的ELFHash Function,特此摘录:
public int ELFHash(String str, int number){
int hash = 0;
long x =0l;
char[] array = str.toCharArray();
for(int i=0; i<array.length; i++){
hash = (hash << ...
- 2008-08-28 12:08
- 浏览 5141
- 评论(2)
选择排序的工作原理:
1. 找到数据集中的最小元素
2. 将最小元素与未排序剩余元素的第一个元素交换
3. 对剩余元素进行以上步骤
它的时间复杂度是:О(n²),空间复杂度是:О(n),同插入排序类似,它也不适用于大数据集。但是它易于实现,也是一种in-place的排序算法。对于稳定性:简易实现是不稳定的,例如(3 5 5 2),在第二轮中第二个五会被认为是最小的,然后同第一个五进行交换。
选择排序的动画:
选择排序代码(递增):
public void selection_sort(int[] data){
int minimum = 0;
...
- 2008-08-28 06:34
- 浏览 1659
- 评论(1)
插入排序也是一种比较简单的排序方法,它的基本原理就好似我们打牌过程中摸牌理牌那一环:当你摸到一张牌后将其插入到合适的位置。
插入排序首先定位一个数(一般从第二个开始),将这个数依次与位于它之前的数进行比较,经过一轮比较,找到它在这些数中适当的位置。然后定位下一个数,再找到合适的位置,依次进行直到最后一个数。
例如(5 2 1 4 3),黑体为进行交换的两数。
第一轮:
(2 5 1 4 3)
第二轮:
(2 1 5 4 3)
(1 2 5 4 3)
第三轮:
(1 2 4 5 3)
(1 2 4 5 3)
(1 2 4 5 3)
第四轮:
(1 2 ...
冒泡排序,是所有排序中最简单的一种,也是效率最低的一种,时间复杂度О(n²),空间复杂度O(n)。冒泡排序没有改变原始元素的相对位置,因此是稳定的排序。
冒泡排序动画:
冒泡排序Java代码(递增):
public void bubble_sort(int[] data){
for(int i=0; i<data.length; i++){
for(int j=0; j<data.length-1-i; j++){
if(data[j]>data[j+1]) ...
关于算法的笔记应该三年前就开始总结,哎,拖到现在。最近在公司上班闲着无聊,开始重新看算法中的各种排序,发现三年前不能领悟的东西,现在慢慢地开始有些懂了。为了应付以后的各种面试,准备对比较常用的一些排序做一些傻瓜式的整理。
排序的关键字:
1. 时间复杂度:整个排序算法运行所需要的时间。
2. 空间复杂度:排序算法运行过程中所需额外空间。
3. 稳定性:若待排序的序列中有大小相同的两个数,若整个排序过程中不存在两数次序交换的可能性,则该排序算法是稳定的。
4. In-place:算法使用的额外存储空间是常数级的。
由‘简’入‘难’,第一篇介绍最基本的冒泡排序-Bubble Sort
附使用到 ...
- 2008-08-28 01:52
- 浏览 1461
- 评论(6)