《啊哈,算法》阅读笔记

简介: 《啊哈,算法》阅读笔记

算法对于程序员的重要性

算法不是我的命,是我的精气神!

算法对于程序员来说非常重要。以下是算法在程序员工作中的重要性的几个方面:

  1. 解决问题的能力:算法是解决问题的基础。一个好的算法可以帮助程序员高效地解决各种复杂的问题。程序员需要熟悉和掌握不同类型的算法,以便能够选择和应用适当的算法来解决特定的问题。
  2. 提高效率和性能:优秀的算法可以大幅提高程序的效率和性能。通过设计一个高效的算法,程序员可以减少资源消耗、提升执行速度、降低存储空间需求等,从而提高应用程序的整体性能。
  3. 优化资源利用:算法可以帮助程序员更好地管理和利用资源。合理的算法设计可以最大程度地利用计算机的处理能力、内存和存储资源,以及其他相关资源。这有助于避免浪费和资源冗余,提高资源的利用效率。
  4. 增强逻辑思维能力:学习和应用算法可以帮助程序员培养良好的逻辑思维能力。设计和实现算法需要程序员具备清晰的思维和逻辑推理能力,能够将问题分解为更小的子问题,并找到适当的解决方案。这对于日常编码以及解决复杂问题都是至关重要的能力。
  5. 处理大规模数据和复杂问题:随着数据规模和问题复杂性的增加,需要使用高效的算法才能处理。程序员需要了解和掌握各种高级算法和数据结构,以便能够有效地管理和处理大规模数据集,解决在实践中遇到的复杂问题。

算法是程序员工作中不可或缺的一部分。它们能够帮助程序员解决问题、提高效率和性能、优化资源利用,并提升逻辑思维能力。掌握和应用合适的算法对于程序员来说是非常重要的技能。

第一章:排序 13

第 1 节 最快最简单的排序——桶排序

简化版的桶排序

代码如下:

int[] book = new int[1001];
int i, j, t;
for (i = 0; i <= 1000; i++)
{
    book[i] = 0;
}
int n = int.Parse(Console.ReadLine());//输入一个数n,表示接下来有n个数
for (i = 1; i <= n; i++)//循环读入n个数,并进行桶排序
{
    t = int.Parse(Console.ReadLine()); //把每一个数读到变量t中
    book[t]++; //进行计数,对编号为t的桶放一个小旗子
}
for (i = 1000; i >= 0; i--) //依次判断编号1000~0的桶
{
    if (book[i] == 1)
    {
        Console.WriteLine("{0}", i); 
    }
}

我要说原理:有一千个桶,你输入1,就给序号1的标记,你输入10就给输入10的标记;

输出的时候,只对标记的输出;输出的自带顺序,因为再输入的时候已经按序入桶了。

问题是:

你输入的数字不能大于桶的个数,否则没地方安置你;

输入的数字还不能重复,否则会被替换掉,只能保留一个。

你输入的数字也不能说复数,因为,序号没有负数;

结论:这是一个弊端很多,但是很好玩的算法;

算法复杂度(m是桶的个数,n为待排序个数):O(m+n+m+n);忽略较小常数O(M+N)

第二节:冒泡排序

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换

过来。既然是从大到小排序,也就是说越小的越靠后。

冒泡排序


代码如下

int[] a = new int[100];
    int i, j, t;
int n = int.Parse(Console.ReadLine());//输入一个数n,表示接下来有n个数 //输入一个数n,表示接下来有n个数
for (i = 1; i <= n; i++) //循环读入n个数到数组a中
{
    a[i] = int.Parse(Console.ReadLine());//输入一个数n,表示接下来有n个数
}
//冒泡排序的核心部分
for (i = 1; i <= n - 1; i++) //n个数排序,只用进行n-1趟
{
    for (j = 1; j <= n - i; j++) //从第1位开始比较直到最后一个尚未归位的数
    {
        if (a[j] < a[j + 1]) //比较大小并交换
        { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; }
    }
}
for (i = 1; i <= n; i++) //输出结果
{
    Console.WriteLine(":{0} ", a[i]);
}

冒泡排序的核心部分是双重嵌套循环。不难看出冒泡排序的时间复杂度是 O(N 2

)。

第三节: 快速排序

首先,从数组中选择一个元素,这个元素被称为基准值(pivot)。

我们暂时将数组的第一个元素用作基准值。

接下来,找出比基准值小的元素以及比基准值大的元素。

一个由所有小于基准值的数字组成的子数组;

基准值;

一个由所有大于基准值的数组组成的子数组。

如果子数组是有序的,就可以像下面这样合并得到一个有序的数组:左边的数组 + 基准值 + 右边的数组。在这里,就是[10, 15] + [33] + [],结果为有序数组[10, 15, 33]。

static List<int> QuickSort(List<int> array)
    {
        if (array.Count < 2)
        {
            return array;
        }
        else
        {
            int pivot = array[0];
            List<int> less = new List<int>();
            List<int> greater = new List<int>();
            for (int i = 1; i < array.Count; i++)
            {
                if (array[i] <= pivot)
                {
                    less.Add(array[i]);
                }
                else
                {
                    greater.Add(array[i]);
                }
            }
            List<int> sortedLess = QuickSort(less);
            List<int> sortedGreater = QuickSort(greater);
            sortedLess.Add(pivot);
            sortedLess.AddRange(sortedGreater);
            return sortedLess;
        }
    }

第二章:栈,队列,链表 37

第一节 队列

只允许队首出队(删除),队尾插入(新增);

struct queue 
{ 
 int data[100];//队列的主体,用来存储内容
 int head;//队首
 int tail;//队尾
};

队首和队尾重合则队列为空;队首和队尾记录的是他们的位置

第二节:栈

有一种是后进先出的数据结构,它叫做栈。栈限定为只能在一端进行插入和删除操作。

第四节:链表

每一个结点都由两个部分组成。左边的部分用来存放具体的数值,那么用一个整型变量

就可以;右边的部分需要存储下一个结点的地址,可以用指针来实现(也称为后继指针)。

struct node 
{ 
 int data; 
 struct node *next; 
};

关注我,不迷路,共学习,同进步

关注我,不迷路,同学习,同进步

相关文章
|
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(上)
27 0
|
2月前
|
机器学习/深度学习 人工智能 算法
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(下)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(下)
23 0
|
2月前
|
机器学习/深度学习 存储 人工智能
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(上)
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20(上)
29 0