【聊聊开发中十分重要的“必抓!”算法】

news2024/11/26 0:31:39

目录

一:前言

二:常见算法介绍

三: 典型算法详述

1.冒泡排序

2.递归排序

3.哈希算法

四:算法的应用场景

五 总结


 一:前言

算法在计算机科学和软件开发中具有重要的地位,它们是解决问题和优化过程的关键工具。

二:常见算法介绍

  1. 排序算法:

    • 冒泡排序(Bubble Sort)
    • 插入排序(Insertion Sort)
    • 选择排序(Selection Sort)
    • 快速排序(Quick Sort)
    • 归并排序(Merge Sort)
    • 堆排序(Heap Sort)
  2. 搜索算法:

    • 线性搜索(Linear Search)
    • 二分搜索(Binary Search)
    • 插值搜索(Interpolation Search)
  3. 图算法:

    • 广度优先搜索(Breadth-First Search,BFS)
    • 深度优先搜索(Depth-First Search,DFS)
    • 最短路径算法(Dijkstra算法、Bellman-Ford算法、Floyd-Warshall算法等)
    • 最小生成树算法(Prim算法、Kruskal算法)
  4. 动态规划算法:

    • 背包问题(Knapsack Problem)
    • 最长公共子序列(Longest Common Subsequence)
    • 最大子数组和(Maximum Subarray Sum)
    • 最短编辑距离(Edit Distance)
  5. 字符串匹配算法:

    • 暴力匹配(Brute Force)
    • KMP算法
    • Boyer-Moore算法
  6. 哈希算法:

    • 哈希表(Hash Table)
    • 哈希集合(HashSet)
    • 哈希映射(HashMap)
  7. 贪心算法:

    • 零钱兑换(Coin Change)
    • 活动选择问题(Activity Selection Problem)
  8. 大数运算算法:

    • 大整数加法
    • 大整数乘法

三: 典型算法详述

1.冒泡排序

   原理:

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历待排序的元素,比较相邻两个元素的大小,并根据需要进行交换,直到整个序列有序为止。

  1. 从序列的第一个元素开始,依次比较相邻的两个元素。
  2. 如果前一个元素大于后一个元素,则交换这两个元素的位置。
  3. 继续向后遍历,对剩下的元素进行相同的比较和交换操作,直到遍历到倒数第二个元素。
  4. 完成一轮遍历后,最大的元素会被交换到序列的末尾。
  5. 重复执行步骤1至步骤4,每次遍历都将确定一个当前未排序部分的最大元素,并将其交换到适当位置。
  6. 重复执行以上步骤,直到整个序列有序。

   案例:

假设有一个待排序的整数数组 [5, 2, 8, 1, 3],我们可以使用冒泡排序对其进行排序。

首先,从数组的第一个元素开始比较相邻的两个元素:5 和 2。由于 5 大于 2,所以将它们交换位置,数组变为 [2, 5, 8, 1, 3]。

接下来,比较 5 和 8,它们已经是有序的,无需交换位置。

再比较 8 和 1,由于 8 大于 1,将它们交换位置,数组变为 [2, 5, 1, 8, 3]。

继续比较 8 和 3,同样进行交换,数组变为 [2, 5, 1, 3, 8]。

完成第一轮遍历后,最大的元素 8 已经位于数组的末尾。

接下来,进行第二轮遍历。比较 2 和 5,它们已经是有序的。

然后比较 5 和 1,进行交换,数组变为 [2, 1, 5, 3, 8]。

继续比较 5 和 3,进行交换,数组变为 [2, 1, 3, 5, 8]。

完成第二轮遍历后,次大的元素 5 也已经就位。

最后,进行第三轮遍历。比较 2 和 1,进行交换,数组变为 [1, 2, 3, 5, 8]。

经过三轮遍历后,整个数组已经有序。

所以,最终的排序结果为 [1, 2, 3, 5, 8]。

2.递归排序

递归排序其实就是上面说的两种:快速和归并

  1. 快速排序(Quick Sort):

    • 选择一个基准元素,通常是数组中的一个元素。
    • 将数组分区为两个子数组:小于基准元素的元素放在左边,大于基准元素的元素放在右边。
    • 对左右子数组分别递归地应用快速排序算法。
    • 终止条件是子数组的长度为 0 或 1,此时它们已经有序。
    • 最后将所有子数组的结果合并起来得到最终的排序结果。
  2. 归并排序(Merge Sort):

    • 将数组不断二分为较小的子数组,直到子数组的长度为 1。
    • 将相邻的子数组合并成更大的有序数组。
    • 重复合并操作,直到最终合并为一个完整的有序数组。

这两种递归排序算法的思想都是将排序问题拆分为更小规模的子问题,然后递归求解,并通过合并或分区操作将子问题的结果合并成最终的排序结果。

以下是一个归并排序的案例:

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    
    mid = len(arr) // 2
    left_half = arr[:mid]
    right_half = arr[mid:]
    
    # 递归调用,对左右子数组进行排序
    left_half = merge_sort(left_half)
    right_half = merge_sort(right_half)
    
    merged_arr = merge(left_half, right_half)
    return merged_arr


def merge(left, right):
    merged = []
    i = j = 0

    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            merged.append(left[i])
            i += 1
        else:
            merged.append(right[j])
            j += 1

    while i < len(left):
        merged.append(left[i])
        i += 1

    while j < len(right):
        merged.append(right[j])
        j += 1

    return merged


# 示例
arr = [5, 2, 8, 1, 3]
sorted_arr = merge_sort(arr)
print(sorted_arr)

运行上述代码,将输出 [1, 2, 3, 5, 8],即经过归并排序后的有序数组。在此案例中,通过递归调用 merge_sort 函数对原始数组进行拆分和排序,并通过辅助函数 merge 将两个有序的子数组合并为一个有序数组。

3.哈希算法

哈希算法是一种将任意长度的数据映射为固定长度值(哈希值)的算法。它广泛应用于密码学、数据完整性校验、散列存储和查找等领域。

哈希算法的主要特点是:

  1. 确定性:对于相同输入,哈希算法始终产生相同的哈希值。
  2. 效率:计算哈希值的过程应该快速且高效。
  3. 雪崩效应:原始数据发生微小改变时,哈希值应该有较大的差异,以确保最终的哈希结果不可预测。
  4. 不可逆性:从哈希值无法推导出原始数据。

常见的哈希算法包括:

  1. MD5(Message Digest Algorithm 5):产生128位(16字节)的哈希值,已经被认为不安全,不推荐使用。
  2. SHA-1(Secure Hash Algorithm 1):产生160位(20字节)的哈希值,也因存在碰撞攻击问题而不推荐使用。
  3. SHA-256/SHA-512:基于SHA-2系列的哈希算法,分别产生256位(32字节)和512位(64字节)的哈希值,目前仍被广泛使用,并被认为安全可靠。
  4. HMAC(Hash-based Message Authentication Code):是一种带有密钥的哈希算法,用于消息认证和完整性检查。
  5. bcrypt、scrypt、Argon2:这些算法是针对密码哈希而设计的,能够更好地抵御暴力破解攻击。

哈希算法在各个领域都具有重要的应用,但需要根据具体的需求选择合适的算法,并注意选择足够强度的

上面其他的很多算法接触的不太多,所以只例举自己比较熟悉的几个,其他的如果大家想了解更多可以去网上搜索相关资料,我是汇总整理 了一下。

四:算法的应用场景

  1. 搜索引擎:搜索引擎使用各种算法来帮助用户快速找到相关的信息,例如页面排名算法(如PageRank)和查询处理算法。这些算法能够对海量的网页进行高效的索引和搜索,提供准确且有用的搜索结果。

  2. 社交网络:社交网络平台依靠算法来连接人与人之间的关系,并为用户推荐朋友、内容和广告。基于图论和机器学习等算法,社交网络可以分析用户的兴趣、行为和社交网络拓扑结构,从而提供个性化的服务和体验。

  3. 金融领域:在金融领域,算法被广泛应用于风险管理、股票交易、信用评估和欺诈检测等方面。算法能够分析市场数据、历史交易模式和其他相关因素,辅助金融决策和预测未来趋势,提高交易效率和风险控制能力。

  4. 医疗诊断和图像处理:医学诊断和图像处理领域需要算法来解析和分析医疗图像、扫描结果和患者数据。例如,机器学习算法在肿瘤检测、疾病诊断和药物研发等方面发挥着重要作用,帮助医生准确评估和判断。

  5. 交通和物流:算法在交通和物流管理中有广泛应用。通过优化路径规划、车辆调度和货运路线等问题,算法可以提高交通效率、减少拥堵,同时降低物流成本并提升配送速度。

  6. 自然语言处理:自然语言处理是让计算机理解和处理人类语言的领域。算法在文本分类、情感分析、机器翻译和智能助手等方面发挥着关键作用,为我们提供便捷的语言交互和信息处理能力。

五 总结

总之,算法在计算机科学和软件开发的各个领域都有广泛的应用。无论是解决实际问题、提高效率还是创造新的技术和应用,算法都是不可或缺的基础工具。因此,掌握和理解各种算法对于从事相关领域的人来说是非常重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0基础学习VR全景平台篇 第57篇:高级功能-多语言

功能位置示意 一、本功能将用在哪里&#xff1f; 多语言功能&#xff0c;可一键设置作品界面语言为中/英文&#xff0c;或跟随系统自动切换中/英文&#xff0c;各位可以用户可以轻松制作英文版VR全景作品&#xff0c;满足国外用户访问的需求。 此外蛙色VR平台&#xff0c;可通…

android车载开发,如何模拟器上实现多屏

三个点&#xff0c;Display-addSecondary display 方案一 通过Presentation来实现&#xff0c;他是一个Dialog&#xff08;context&#xff0c;display&#xff09; val displayService getSystemService(DISPLAY_SERVICE) as DisplayManager val displays displayService.…

9、架构:CLI 设计

通常大部分的程序员会更加习惯使用 CLI&#xff08;Command-Line Interface 命令行界面&#xff09;来辅助开发业务&#xff0c;包括初始化、更新、构建、发布等功能&#xff0c;可以获得沉浸式一站的开发体验。 在之前有一篇企业级 CLI 开发实战介绍过如何开发一款适用团队的…

了解k8s容器组pods

一&#xff1a;Pods概述 在 部署第一个应用程序 中创建 Deployment 后&#xff0c;k8s创建了一个 Pod&#xff08;容器组&#xff09; 来放置应用程序实例&#xff08;container 容器&#xff09; Pod 容器组 是一个k8s中一个抽象的概念&#xff0c;用于存放一组 container&a…

yolov5增加AFPN-全新特征融合模块AFPN,效果完胜PAFPN

论文学习&#xff1a;AFPN: Asymptotic Feature Pyramid Network for Object Detection-全新特征融合模块AFPN&#xff0c;完胜PAFPN_athrunsunny的博客-CSDN博客 先上配置文件yolov5s-AFPN.yaml # YOLOv5 &#x1f680; by Ultralytics, AGPL-3.0 license# Parameters nc: 80…

Nginx安装与介绍

Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用 Nginx 网站用户有&#xff1a;百度、京东、新浪…

Windows11最新版官网制作系统盘

在百度里搜索"windows11官网下载"&#xff0c;然后选择微软官网的链接&#xff1a; 下載 Windows 11https://www.microsoft.com/zh-tw/software-download/windows11 然后就可以制作U盘windows11官网系统的安装U盘了。

进行APP广告变现之前,媒体需要关注哪些APP运营的信息指标

在进行广告变现之前&#xff0c;媒体商务或运营人员首先要知道自家 APP 的一些基本体量信息及基本用户使用情况信息。唯有充分而全面的掌握并罗列出这些基础 APP 运营指标&#xff0c;才能便于媒体通过自家真实流量规模、实力等来预估广告位价值&#xff0c;或更好的像广告需求…

设计模式--------创建型模式

创建型模式 用于描述“怎样创建对象”&#xff0c;它的主要特点是“将对象的创建与使用分离”。GoF&#xff08;四人组&#xff09;书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 1.单例设计模式 单例模式&#xff08;Singleton Pattern&#xff09…

如何截取视频中的一段视频?简单的截取方法分享

如果我们只需要处理视频中的某一部分&#xff0c;就可以将这一部分的内容截取下来&#xff0c;可以省去处理整个视频文件的时间和精力。此外&#xff0c;截取视频也可以让更加方便地分享和保存视频内容。此外&#xff0c;如果我们只需要分享视频中的一部分给他人观看&#xff0…

二、MongoDB 安装集

一、MongoDB—Docker mongoNoSQL Manager for MongoDB&#xff1a; L1、L2 1. 创建容器 docker search mongo docker pull mongodocker run -d --namemongo_1 -p 27017:27017 \-v /root/mongo/configdb:/data/configdb/ \-v /root/mongo/db/:/data/db/ \[镜像ID] --auth2. 登…

【软件测试】盘一盘工作中遇到的 Redis 异常测试

目录 前言&#xff1a; 一、更新 Key 异常 二、Key的删除和丢失 三、KEY 过期策略不当造成内存泄漏 四、查询Redis异常时处理 五、redis 穿透、击穿、雪崩 六、Redis死锁 七、Redis持久化 八、缓存与数据库双写时的数据一致性 前言&#xff1a; 在软件测试过程中&…

第八章、【Linux】文件与文件系统的压缩,打包与备份

8.1 压缩文件的用途与技术 8.2 Linux 系统常见的压缩指令 列几个常见的压缩文件扩展名&#xff1a; 8.2.1 gzip, zcat/zmore/zless/zgrep gzip 可以说是应用度最广的压缩指令了&#xff01;目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。 当你使用 gzip 进…

Error: 系统错误,错误码:80051,source size 2649KB exceed max limit 2MB [202306

小程序主包体积过大&#xff0c;预览到手机失败 把这个勾选一下&#xff0c;上限调整到4MB

Android性能优化问题方案的总结~

虽然总说“英雄不问出处”&#xff0c;但大厂卡学历是默认的“潜规则”。不过最近一个老弟&#xff0c;让我挺振奋的&#xff01;人家完全靠实力上岸。他就属于死磕型的&#xff0c;是我近2年见过的少有的Android性能优化高手。 要说他也挺聪明&#xff0c;贼会选领域。你出去随…

力扣 -- 740. 删除并获得点数

题目链接&#xff1a;740. 删除并获得点数 - 力扣&#xff08;LeetCode&#xff09; 下面是用动态规划的思想解决这道题的过程&#xff0c;相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴。 参考代码&#xff1a; class Solution { public:int deleteAndEarn(vector<…

【MySQL】 MySQL安装

文章目录 1. MySQL安装配置内置环境关闭MySQL卸载MySQL确认环境是否干净 配置MySQL yum源yum源 的安装注意事项检测是否安装成功 MySQL的启动MySQL的登录登录方案一 获取临时密码登录方案二 免密码登录 MySQL的配置文件 1. MySQL安装 配置内置环境 输入 ps axj | grep mysql …

SpringBoot教学补充资料3-Maven安装

Maven下载地址&#xff1a;https://maven.apache.org/download.cgi 下载后进行解压&#xff0c;记住解压路径。 mvn -v

大文件下载

背景 google chrome下载大文件的时候&#xff0c;没有断点续传的功能&#xff0c;会因为网络不稳定多次下载失败。 google drive大文件 安装google drive客户端 点开别人的goole drive链接&#xff0c;保存在自己的文件夹下 本人的goole drive获取file_id # 链接格式 h…

mapbox icon-allow-overlap 和 icon-ignore-placement的区别

icon-allow-overlap 和 icon-ignore-placement的区别 官网解释&#xff1a;If true, the icon will be visible even if it collides with other previously drawn symbols. 翻译&#xff1a;如果该属性为true那么他会显示即便会冲突和在它之前已经添加的图层。 官网解释&am…