《趣学算法》阅读笔记(二)

简介: 《趣学算法》阅读笔记(二)

14天阅读挑战赛

话不多说,我们接着上篇文章 《趣学算法》阅读笔记(一),继续总结学习

1. 第一章 算法之美

1.3 哥德巴赫猜想的证明

哥德巴赫猜想:任一大于2的偶数,都可表示成两个素数之和。
验证:2000以内大于2的偶数都能够分解为两个素数之和。

class Main {
    public static void main(String[] args) {
        System.out.println(isPass(2000));
    }

    /**
     * 哥德巴赫猜想:任一大于2的偶数,都可表示成两个素数之和。
     * 
     * @Title: isPass
     * @Description:验证:2000以内大于2的偶数都能够分解为两个素数之和。
     * @author: itbird
     * @date 2022年10月19日 下午8:42:52
     * @param n
     * @return boolean 时间复杂度: O((n^2)logn) 空间复杂度: O(N)
     */
    public static boolean isPass(int n) {
        if (n <= 3) {
            return false;
        }
        // 4为第一个大于2的偶数
        for (int i = 4; i <= n; i = i + 2) {
            if (!isDecomposeForTwoPrime(i)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否可以分解为两个素数只和
     * 
     * @Title: isDecomposeForTwoPrime
     * @Description:
     * @author: itbird
     * @date 2022年10月20日 上午9:19:42
     * @param i
     * @return boolean 时间复杂度: O(nlogn) 空间复杂度: O(1)
     */
    private static boolean isDecomposeForTwoPrime(int i) {
        for (int j = 2; j < i; j++) {
            if (isPrime(j) && isPrime(i - j)) {
//                System.out.println(j + "  " + (i - j));
                return true;
            }
        }
        return false;
    }

    /**
     * 是否为一个素数 ,1和本身
     * 
     * @Title: isPrime
     * @Description:
     * @author: itbird
     * @date 2022年10月20日 上午9:23:01
     * @param j
     * @return boolean 时间复杂度: O(logn) 空间复杂度: O(1)
     */
    private static boolean isPrime(int j) {
        for (int i = 2; i <= Math.sqrt(j); i++) {
            if (j % i == 0) {
                return false;
            }
        }
        return true;
    }
}

1.4 时间复杂度如何求取?

求解算法的时间复杂度的具体步骤是:

  • 找出算法中的基本语句:即算法中执行次数最多的那条语句,通常是最内层循环的循环体。
  • 计算基本语句的执行次数的数量级;
  • 用大Ο记号表示算法的时间性能。

例子1:O(1) 算法
此代码只需要执行一次,时间复杂度为O(1)。

int i = 1;
print("i = %d \n", i);

例子2:O(n) 算法
循环求和算法, 这个算法需要执行n次O(1)的打印操作,因此
在这里插入图片描述

for(int i=0; i<N; i++){
   printf("i = %d \n", i);
}

例子3: O(n^2)算法
嵌套循环求和算法,这个算法需要执行N*N此O(1)的打印操作,因此
在这里插入图片描述

for(int i=0; i<N; i++){
   for(int j=0; j<N; j++){
      printf("i = %d, j = %d \n", i, j);
   }
}

例子4: O(logN)算法
在while循环里面,每次都将 i 乘以 2,乘完之后,i 距离 n 就越来越近了。假设循环x次之后,i 就大于 n 了,此时这个循环就退出了,也就是说 2 的 x 次方等于 n,那么 x = log2n,也就是说当循环 log2n 次以后,这个代码就结束了。因此这个代码的时间复杂度为:O(logn)。

int i = 1;
while(i<n)
{
    i = i * 2;
}
目录
相关文章
|
2月前
|
自然语言处理 算法 安全
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-16
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-16
21 0
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-16
|
2月前
|
机器学习/深度学习 自然语言处理 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-12(上)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-12(上)
35 0
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-12(上)
|
2月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
72 1
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
73 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
机器学习/深度学习 安全 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-23(下)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-23(下)
46 0
|
2月前
|
安全 搜索推荐 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-23(上)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-23(上)
35 0
|
2月前
|
自然语言处理 搜索推荐 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21(下)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21(下)
37 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21(上)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21(上)
28 0
|
2月前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(下)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(下)
23 0
|
2月前
|
机器学习/深度学习 存储 人工智能
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(上)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(上)
29 0