当前位置: 首页 > article >正文

算法思维初学者指南

概念

数据结构和算法是编程的基础。编程语言来来去去,但DSA一直在那里,确保软件开发过程的效率。

算法是用于解决问题或执行计算的过程。算法充当指令的精确列表,在基于硬件或软件的例程中逐步执行指定的操作。算法是成功和高效开发的核心。您将在学习编码时使用它们,在技术面试中会被问及它们,它们可能会成为您日常开发工作的一部分。

每个解决方案都始于策略,而算法是解决编码问题的策略。因此,我们必须学会设计一种高效的算法,并将该“算法”转换为正确的代码以完成工作。

但是在数据结构和算法中存在许多编码问题,大多数时候,这些问题对我们来说是新的。因此,作为程序员,我们需要将自己培养成自信的问题解决者,不会被给定问题的难度吓倒。

思维逻辑

它强调了编程中的逻辑。让我们举一个现实生活中的例子开始。

想象一下,您是一名班级监督员,必须收集所有学生的试卷并根据他们的卷号排列它们。

你把文件分成相等的两半,另一半给你的朋友。之后,您和您的伴侣按卷号对两半进行排序。最后,剩下要做的就是一次堆叠两组一张纸,瞧!你已经用了一半的时间完成了。

不知不觉中,您在此实例中使用了合并排序,这是可用的最重要的排序算法之一。

数据结构用于以逻辑方式存储和组织数据,而算法是我们用来执行特定任务的过程。两者相结合,使智能手机、计算机和网站能够做出有效的决策并顺利运行。

简单的事实是,算法只是做事的方式。它们是解决某种问题的过程。

从本质上讲,算法思维是思考如何以系统的方式解决问题。类似于这样的思考过程:

  • 明确定义问题
  • 将问题分解为小而简单的部分
  • 为问题的每个部分定义解决方案
  • 实施解决方案
  • 使其高效(最终)

不同算法

以下是不同种类型的算法:

  • 暴力算法:Brute Force Algorithm 该算法盲目迭代问题的所有可能解决方案,搜索函数的一个或多个解决方案。
  • 递归算法:Recursive Algorithm 此算法反复调用自身,直到解决问题。递归算法在每次调用递归函数时都使用较小的值调用自身。
  • 动态规划算法:Dynamic Programming Algorithm 该算法通过将问题划分为子问题来解决问题。然后将结果存储起来,以应用于将来的相应问题。
  • 分而治之算法:Divide and Conquer Algorithm 这种通用算法分为两部分。一部分将问题划分为更小的子问题。第二部分解决这些问题,然后将它们组合起来产生解决方案。
  • 贪婪算法:Greedy Algorithm 该算法通过找到局部最优解来解决优化问题,希望它是全局水平的最优解。但是,它不能保证最佳解决方案。
  • 回溯算法:Backtracking Algorithm 该算法在增量方法中找到给定问题的解决方案,并一次解决一个问题。
  • 随机算法:Randomized Algorithm 该算法减少了运行时间和基于时间的复杂性。它使用随机元素作为其逻辑的一部分。
  • 搜索引擎算法:Search engine algorithm 该算法将关键字和运算符的搜索字符串作为输入,在其关联的数据库中搜索相关网页并返回结果。
  • 加密算法:Encryption algorithm 此计算算法根据指定的操作转换数据以保护数据。对称密钥算法(例如数据加密标准)使用相同的密钥来加密和解密数据。如果算法足够复杂,那么缺少密钥的人都无法解密数据。
  • 排序算法:Sorting algorithm 排序算法用于基于比较运算符重新排列数据结构,该运算符用于确定数据的新顺序。
  • 哈希算法: Hashing algorithm 该算法获取数据并将其转换为具有哈希的统一消息。

示例:在给定的数字列表中查找最大值。

解决方案:这是一组说明(或算法),您可以按照这些说明(或算法)在列表中查找最大值。

  • 从第一个数字开始,并将其指定为最大值。
  • 现在,转到第二个数字;如果第二个数字>第一个数字,则将最大值设置为第二个数字,否则没有变化。
    • 即,如果当前数字大于最大值,则将最大值设置为当前数字。
  • 转到列表中的下一个数字,然后重复步骤 2,直到到达列表末尾。
  • 最大值是存储在最大值变量中的值。

用 Python 编写上述程序:

def find_max(list):
  maximum = list[0] # 将第一个值设置为最大值
  for i in range(len(list)):
    if list[i] > maximum: # 检查当前值是否大于当前最大值
      maximum = list[i] # 如果当前值大于当前值,则将当前值设置为最大值
  return maximum


# 测试列表
l1 = [1, 2, 3, 4, 5, -5, -4.5, -3.5, -2.5, -1.5, 0]

# 输出结果
find_max(l1)

优点和缺点

优点缺点
提供清晰准确的解决方案描述,使其易于理解和遵循设计算法既困难又耗时
它是可重用的,即一旦设计了算法,就可以多次使用它需要强大的解决问题的能力和对编程概念的理解
算法被设计为优化和高效,这使得它们能够解决复杂的问题。它们是为特定平台或编程语言设计的,这使得它们不太灵活。

http://www.kler.cn/a/416513.html

相关文章:

  • MySQL底层概述—7.优化原则及慢查询
  • 独家|京东调整职级序列体系
  • 2024学习之前端微信小程序开发教程,从入门到精通-含基础+实战+源码code
  • Spring Boot开发——整合JPA配置多数据源
  • vitess使用记录:vtctldclient,设置分表规则
  • 嵌入式硬件面试题【经验】总结----会不断添加更新
  • XRD精修教程:CMPR软件介绍-测试狗
  • Spring Boot 开发环境搭建及示例应用
  • 数据分析-52-时间序列分解之变分模态分解VMD
  • 【论文笔记】Tool Learning with Foundation Models 论文笔记
  • 泷羽sec-蓝队基础之网络七层杀伤链(上) 学习笔记
  • 【Datawhale组队学习】模型减肥秘籍:模型压缩技术6——项目实践
  • 工业一体机在自动化产线的作用及核心优势有哪些
  • Docker for Everyone Plus——Unbreakable!
  • uni-app写的微信小程序每次换账号登录时出现缓存上一个账号数据的问题
  • (转)Uni-app 之IOS生成Universal Link(通用链接)
  • 【数据结构-队列】力扣641. 设计循环双端队列
  • 什么是堆?
  • Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
  • ubuntu20配置mysql注意事项
  • 【Linux】nvidia-smi输出参数详解
  • Mac配置和启动 Tomcat
  • MySQL 查询 执行顺序
  • Node.js:开发和生产之间的区别
  • 中国前首富胡志标亮相创客匠人盛会,点燃创始人 IP 新思维火花
  • javaweb-day01-html和css初识