没有合适的资源?快使用搜索试试~ 我知道了~
面试宝典(常考算法总结)
5星 · 超过95%的资源 需积分: 9 243 下载量 67 浏览量
2009-11-22
16:34:25
上传
评论 5
收藏 1.17MB PDF 举报
温馨提示
试读
232页
常考算法的总结,对面是很有用处。抓取于林信良的博客,制作精美,覆盖各类面试常考算法
资源推荐
资源详情
资源评论
常见程式演算笔记
From Gossip@caterpillar
非关语言: 常见程式演算
“常见程式演算”主要收集一些常见的程式练习题目,您可以藉这些题目培养一些程式设计逻辑的感觉,对题目的分类只是个大概,方便索引而已,实作的部份是使 用 C
及 Java。
老掉牙
● 河内塔
● 费 式数列
● 巴 斯卡三角形
● 三 色棋
● 老鼠 走迷官(一)
● 老 鼠走迷官(二)
● 骑士走 棋盘
● 八个皇 后
● 八枚银 币
● 生命游戏
● 字串 核对
● 双 色、三色河内塔
● 背 包问题(Knapsack Problem)
数、运算
● 蒙地卡罗法求 PI
● Eratosthenes 筛选求 质数
● 超长整数 运算(大数运算)
● 长 PI
● 最大公 因数、最小公倍数、因式分解
● 完 美数
● 阿 姆斯壮数
● 最大访客数
● 中 序式转后序式(前序式)
● 后序式 的运算
关于赌博
● 洗扑 克牌(乱数排列)
● Craps 赌博游戏
● 约 瑟夫问题(Josephus Problem)
集合问题
排 序
● 得分排行
● 选 择、插入、气泡 排序
● Shell 排序法 - 改良的插入排序
● Shaker 排序法 - 改良的气泡排序
● Heap 排序法 - 改良的选择排序
● 快速排 序法(一)
● 快速排 序法(二)
● 快速排 序法(三)
● 合并排序 法
● 基数排序 法
搜寻
● 循 序搜寻法(使用卫兵)
● 二 分搜寻法(搜寻原则的代表)
● 插 补搜寻法
● 费 氏搜寻法
矩阵
● 稀 疏矩阵
● 多 维矩阵转一维矩阵
● 上 三角、下三角、对称矩阵
● 奇数魔方阵
● 4N 魔方阵
● 2(2N+1) 魔方阵
堆叠、伫列
● 堆 叠 - 使用阵列实作
● 堆叠 - 使用链结实作(C 语言动态记忆体宣告)
● 堆 叠 - 使用 Java 作物件封装
● 伫 列 - 使用阵列实作
● 伫列 - 使用链结实作(C语言动态记忆体宣告)
● 伫 列 - 使用Java 作物件封装
http://caterpillar.onlyfun.net/GossipCN/AlgorithmGossip/AlgorithmGossip.htm(第 1/2 页)2008-7-30 21:25:06
河内塔
From Gossip@caterpillar
Algorithm Gossip: 河内塔
说明
河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;
1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时
神在第一根棒上放置64个由上至下依由小 至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬
运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当 盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来
临之时。
解法
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。
如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而
被遮住的部份,其实就是进入程式的递回处理。
事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则所需次数为:
2
64
- 1 = 18446744073709551615
为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什么概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左
右。
演算法
Procedure HANOI(n, A, B, C) [
IF(n == 1) [
http://caterpillar.onlyfun.net/GossipCN/AlgorithmGossip/HanoiTower.htm(第 1/3 页)2008-7-30 21:25:27
河内塔
PRINT("Move sheet " n " from " A " to " C);
]
ELSE [
HANOI(n-1, A, C, B);
PRINT("Move sheet " n " from " A " to " C);
HANOI(n-1, B, A, C);
]
]
实作
● C
#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
if(n == 1) {
printf("Move sheet %d from %c to %c\n", n, A, C);
}
else {
hanoi(n-1, A, C, B);
printf("Move sheet %d from %c to %c\n", n, A, C);
hanoi(n-1, B, A, C);
}
}
int main() {
int n;
printf("请输入盘数:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
● Java
import java.io.*;
public class Hanoi {
public static void main(String args[]) throws IOException {
int n;
BufferedReader buf;
buf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入盘数:");
n = Integer.parseInt(buf.readLine());
Hanoi hanoi = new Hanoi();
hanoi.move(n, 'A', 'B', 'C');
http://caterpillar.onlyfun.net/GossipCN/AlgorithmGossip/HanoiTower.htm(第 2/3 页)2008-7-30 21:25:27
河内塔
}
public void move(int n, char a, char b, char c) {
if(n == 1)
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
else {
move(n - 1, a, c, b);
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
move(n - 1, b, a, c);
}
}
}
http://caterpillar.onlyfun.net/GossipCN/AlgorithmGossip/HanoiTower.htm(第 3/3 页)2008-7-30 21:25:28
剩余231页未读,继续阅读
Gemistorm
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页