Posts Tagged ‘算法’

August 12, 2009

AVL是一种二叉搜索树(Binary Search Tree),被称为平衡树(Balanced Binary Tree),由Adelsonr Velskii 和Landis 提出并以他们的名字命名。

今天看严蔚敏老太太的数据结构,她老人家是这么描述AVL的:AVL,它或者是一棵空树,或者是具有以下性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差(平衡因子:BF)的绝对值不超过1。看着这么个定义很别扭,总觉得对平衡因子的要求比较弱,也可能是我悟性较弱吧,在这句话上我很是下了一番功夫……如果这样来定义的话,可能会让我更容易理解一些:

  1. 根的左子树和右子树的高度差的最大值为1,空树的高度为0。
  2. 根的左子树和右子树都是AVL树。
Tags: ,,. 11 views
August 10, 2009
kmp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Match
{
public:
	Match(): repos(NULL){}
	Match(const string& main, const string& mod) 
		:repos(new int[mod.size()]), m_main(main), m_mod(mod)
	{}
 
	~Match()
	{
		delete [] repos;
	}
 
	//~ kmp搜索,默认从主串0位置处开始,
	//~ 匹配成功返回匹配开始的索引,否则返回-1
	int strkmp(size_t pos = 0);
 
	//~ 重设主串与模式串
	void reset(const string& main, const string& mod);
 
private:
	int * repos;
	string m_main; //~ 主串
	string m_mod; //~ 模式串
 
	//~ 生成重定位的索引值
	void gen_rps();
 
};
Tags: . 19 views
August 7, 2009

其实,我最初写的不是这样子滴,对比上面的程序,看看下面这个哪里会出问题?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string multiply(const string &l, const string &r)
{
	size_t lenl = l.size();
	size_t lenr = r.size();
	string result(lenl+lenr, '\0');
	for(size_t i = 0; i < lenl; ++i)
		for(size_t j = 0; j < lenr; ++j)
		{
			result[i + j + 1] += ctoi(l[i]) * ctoi(r[j]);
		}
	for(size_t i = lenl + lenr-1 ; i > 0; --i)
	{
		result[i - 1] += (unsigned char)result[i] / 10;
		result[i] = (unsigned char)result[i] % 10 + '0';
	}
	if(result[0] == 0)
		result.erase(0, 1);
	else
		result[0] += '0';
 
	return result;
}
Tags: ,,. 15 views
July 20, 2009
题目描述:

给你n个整数,用这n个拼成一个超长的整数,要令这个新的整数最小

输入:

多组测试数据,每组第一行为n(1<=n<=1000),接下来是n个正整数,使用空格或者换行分开;
每个数字的长度不会超过1000,不存在前导0;
当n为0时结束程序.

输出:

对于每组输入,输出拼成的新的整数的结果

Tags: ,. 36 views
July 18, 2009

POJ 1028:http://acm.pku.edu.cn/JudgeOnline/problem?id=1028
模拟浏览器前进、后退、访问到某个页面的过程。又是一道水题,我什么时候才能做到水王之王的位置?

Tags: ,. 30 views
July 12, 2009

ZOJ上的一道题(illusive chase)让我憋了一整天才AC了,而且用了224行,最后优化到115行!我真真是没救了,也只能做做小儿科的题目了!sucks……这里有上次百度之星的一道水题……

题目描述:

一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:

15=1+2+3+4+5
15=4+5+6
15=7+8
Tags: ,. 112 views
July 9, 2009

由于归并排序需要O(n)的额外空间,在普通函数中,我实在想不出好的办法来申请这块内存。于是只好把他写成一个模板类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T>
class Merger
{
public:
	Merger(T* array, size_t n):extra(new T[n/2]) //~ 归并需要O(n)的额外空间
	{
		sub_Merger(array, n); //~ 调用递归子函数
	}
	~Merger()
	{
		delete [] extra; //~ 释放内存
	}
private:
	T* extra;
	Merger();
	void sub_Merger(T* array, size_t n);
};

如果你有什么好的建议的话,敬请赐教,不胜感激涕零!:)

Tags: ,. 104 views
June 28, 2009
1
2
3
4
5
6
7
8
9
class quick_sort
{
public:
	typedef int T;
	explicit quick_sort(T* src, int beg, int end);
private:
	void sub_sort(int beg, int end);
	T* m_src;
};
Tags: ,. 39 views

分别演示了冒泡排序和快速排序。最有意思的是里面的机器人,神态相当的可笑!

Tags: ,. 35 views
May 25, 2009

1、 并行计算:

并行计算是指同时对多个任务或多条指令、或对多个数据项进行处理。完成此项处理的计算机系统称为并行计算机系统,它是将多个处理器通过网络连接以一定的方式有序地组织起来。

Tags: . 91 views
Page 3 of 41234