算法概述-习题
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法概述-习题相关的知识,希望对你有一定的参考价值。
文章目录
一:算法分析题
答
- 3 n 2 + 1 0 n = O ( n 2 ) 3n^2+10^n=O(n^2) 3n2+10n=O(n2)
- n 2 10 + 2 n = O ( 2 n ) \\fracn^210+2^n=O(2^n) 10n2+2n=O(2n)
- 21 + 1 n = O ( 1 ) 21+\\frac1n=O(1) 21+n1=O(1)
- L o g n 3 = 3 l o g n = O ( l o g n ) Logn^3=3logn=O(logn) Logn3=3logn=O(logn)
- 10 l o g 3 n = 10 n l o g 3 = O ( n ) 10log3^n=10nlog3=O(n) 10log3n=10nlog3=O(n)
答 :两个算法时间复杂度相同,都是常数阶,区别在于常数因子不同
答 :一般来说, O ( 1 ) O(1) O(1)< O ( l o g 2 n ) O(log_2n) O(log2n)< O ( n ) O(n) O(n)< O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)< O ( n 3 ) O(n^3) O(n3)< O ( 2 n ) O(2^n) O(2n)< O ( n ! ) O(n!) O(n!)< O ( n n ) O(n^n) O(nn)(常对幂指)
且有:
- 2 = O ( 1 ) 2=O(1) 2=O(1)
- 4 n 2 = O ( 2 ) 4n^2=O(^2) 4n2=O(2)
- 20 n = O ( n ) 20n=O(n) 20n=O(n)
故: 2 2 2< l o g n logn logn< n 2 3 n^\\frac23 n32< 20 n 20n 20n< 4 n 2 4n^2 4n2< 3 n 3^n 3n< n ! n! n!
答:
(1):
- 由题意知,第一台机器在 t t t秒内可以完成 3 × 2 n 3×2^n 3×2n次基本运算
- 新机器速度比第一台机器速度快64倍,所以它在 t t t秒内可以完成 64 × 3 × 2 n = 3 × 2 n + 6 64×3×2^n=3×2^n+6 64×3×2n=3×2n+6次基本运算
- 由 T = 3 × 2 n T=3×2^n T=3×2n知 n = l o g 2 ( T 3 ) n=log_2(\\fracT3) n=log2(3T)
- 假设新机器需要处理问题规模为 n n e w n_new nnew的问题,则 n n e w = l o g 2 ( 3 × 2 n + 6 3 ) = n + 6 n_new=log_2(\\frac3×2^n+63)=n+6 nnew=log2(33×2n+6)=n+6
- 所以新机器上用同一算法 t t t秒内可以处理输入规模为 n + 6 n+6 n+6的问题
(2)
- 与(1)同理,所以此时新机器上用同一算法 t t t秒内可以处理输入规模为 8 n 8n 8n的问题
(3)
- 由于此时时间复杂度为 O ( 1 ) O(1) O(1),所以在新机器上用 t t t时间可以解决任意规模的问题
答: 此题与1-4同理
- O ( n ) O(n) O(n):能处理输入规模为 100 n 100n 100n的问题
- O ( n 2 ) O(n^2) O(n2):能处理输入规模为 100 n 2 100n^2 100n2的问题
- O ( n 3 ) O(n^3) O(n3):能处理输入规模为 100 n 3 100n^3 100n3的问题
- O ( n ! ) O(n!) O(n!):能处理输入规模为 n + l o g 100 n+log100 n+log100, ≈ n + 6.64 \\approx n+6.64 ≈n+6.64的问题
二:算法实现题
(1)统计数字问题
答: 利用%
每次取出最后一位,同时让此位映射至数组索引处加和即可
import java.util.Arrays;
import java.util.Scanner;
public class PageNumber
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt())
int n = sc.nextInt();
int[] array = new int[10];
for(int i = 1; i < n+1; i++)
int temp = i;
while(temp != 0)
array[temp % 10] += 1;
temp /= 10;
System.out.println(Arrays.toString(array));
sc.close();
(2ÿ
以上是关于算法概述-习题的主要内容,如果未能解决你的问题,请参考以下文章
谁有《数据结构与算法javascript描述》这本书课后练习题的答案啊?
MySQL 进阶 锁 -- MySQL锁概述MySQL锁的分类:全局锁(数据备份)表级锁(表共享读锁表独占写锁元数据锁意向锁)行级锁(行锁间隙锁临键锁)