算法概述-习题

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锁的分类:全局锁(数据备份)表级锁(表共享读锁表独占写锁元数据锁意向锁)行级锁(行锁间隙锁临键锁)

逐行消除空白间隙[重复]

操作系统概述习题三

python概述 习题

python概述 习题