《算法设计与分析》 实验2

1. 百钱百鸡问题

问题提出:公元前5世纪末,中国古代数学家张丘建在他的《算经》中提出了著名的 “百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?即一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,雏鸡一钱3只,问一百只鸡中公鸡、母鸡、雏鸡各多少? 算法的伪代码如下:

for x = 0 to 100
	for y = 0 to 100
     	for z = 0 to 100
         	if  (x+y+z=100)  and  (5*x + 3*y + z/3 = 100)  then
           		System.out.println("  "+x+"  "+y+"  "+z)
         	end if

实验要求: 对上述算法做出改进以提高算法的效率,要求将算法的时间复杂性由Ο(n3)降为 Ο(n2),并将改进的算法编程实现。
思想: 将a, b, c 转换成 a, b, (100 - a - b);

public class moneyCock {
    public static void main(String[] args) {
        for (int i = 0; i <= 100; i++) {
            for (int j = 0; j <= 100; j++) {
                boolean edge = 100 - i - j >= 0 && 100 - i - j <= 100;
                boolean money = i * 5 + j * 3 + (100 - i - j) / 3 == 100;
                boolean flagTimes = (100 - i - j) % 3 == 0;
                if (edge && money && flagTimes) {
                    System.out.println("公鸡数量" + i + ' ' + "母鸡数量为" + j + ' ' + "小鸡数量为" + (100 - i - j));
                }
            }
        }
    }
}

2. 算法和机器性能提高带来输入规模增大的比较

硬件厂商XYZ公司宣称他们研制的微处理器的运行速度是其竞争对手ABC公司同类产品的1000倍。对于计算复杂性分别为 n , n 2 , n 3 n,n^2,n^3 n,n2,n3 的各类算法,若用ABC公司的计算机能在1小时内解决输入规模的问题,则用XYZ公司的计算机在1小时内能解决多大输入规模的问题?

解:
假设ABC公司的微型处理器的运算速度是x,则XYZ公司的微型处理器的运算速度是

n ′ = 1000 n n'= 1000n n=1000n
n ′ 2 = 1000 n 2 n'^2=1000n^2 n2=1000n2 n ′ = 1000 n n'=\sqrt{1000}n n=1000 n
n ′ 3 = 1000 n 3 n'^3=1000n^3 n3=1000n3 n ′ = 10 n n'=10n n=10n
n ! = 1000 n ! n!=1000n! n!=1000n! n ′ = 1000 + l o g 1000 ≈ 1000 + 9.966 n'=1000+log1000 ≈ 1000 + 9.966 n=1000+log10001000+9.966

3. T = 3 × 2 n T=3×2^n T=3×2n

题目:假设某算法在输入规模为n时的计算时间为 T = 3 × 2 n T=3×2^n T=3×2n.在某台计算机上实现并完成该算法在 t 秒。现有另一台计算机,其运行速度为第一台的128倍,那么在这台新机器上用同一算法在t秒内能解输入输入规模为多大的问题?

解:
设新机器的规模是 n 1 n_1 n1
T = 3 × 2 n = 3 × 2 n 1 / 128 T=3×2^n=3×2^{n_1}/128 T=3×2n=3×2n1/128
n 1 = n + 7 n_1=n+7 n1=n+7

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值