首页 > 编程语言 >算法入门篇(一)

算法入门篇(一)

时间:2024-07-17 08:56:18浏览次数:16  
标签:函数 递归 入门篇 算法 数组 字符串 结构

目录

一、语言基础

1.数据类型

基本数据类型

整型(Integer)

浮点型(Floating-point)

字符型(Character)

布尔型(Boolean)

抽象数据类型

数组(Array)

栈(Stack)

队列(Queue)

链表(Linked List)

树(Tree)

图(Graph)

散列表(Hash Table)

堆(Heap)

2.输入输出、数组、字符串

输入/输出(I/O)

数组

字符串

3.顺序结构、选择结构、循环结构

顺序结构

选择结构

循环结构

4.函数、递归

函数(Function)

递归(Recursion)


一、语言基础

1.数据类型

基本数据类型

  1. 整型(Integer)
    • 8位整数(byte)
    • 16位整数(short)
    • 32位整数(int)
    • 64位整数(long)
  2. 浮点型(Floating-point)
    • 32位浮点数(float)
    • 64位浮点数(double)
  3. 字符型(Character)
    • 通常用于表示单个字符(char)
  4. 布尔型(Boolean)
    • 通常有两个值:true 或 false

抽象数据类型

  1. 数组(Array)
    • 可以连续存储多个同类型元素的数据结构。
    • 优点:按索引查询元素速度快,遍历方便。
    • 缺点:大小固定后无法扩容,只能存储一种类型的数据,添加和删除操作慢。
  2. 栈(Stack)
    • 是一种特殊的线性表,特点是先进后出(LIFO)。
    • 主要操作包括入栈(push)和出栈(pop)。
    • 应用场景:实现递归功能。
  3. 队列(Queue)
    • 与栈相似,但特点是先进先出(FIFO)。
    • 主要操作包括入队(enqueue)和出队(dequeue)。
    • 应用场景:多线程阻塞队列管理。
  4. 链表(Linked List)
    • 物理存储单元上非连续的、非顺序的存储结构。
    • 每个元素包含两个结点,一个是数据域,另一个是指向下一个结点地址的指针域。
    • 优点:不需要初始化容量,可以任意加减元素,添加或删除元素快。
    • 缺点:查找元素需要遍历链表,占用空间较大。
  5. 树(Tree)
    • 由n(n>=1)个有限节点组成一个具有层次关系的集合。
    • 常见的树结构有二叉树、平衡树、搜索树等。
  6. 图(Graph)
    • 由节点(顶点)和边组成的集合。
    • 边可以是有向的或无向的,加权或不加权的。
    • 常见的图算法包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法等。
  7. 散列表(Hash Table)
    • 也称为哈希表或哈希映射。
    • 通过哈希函数将键映射到值,实现快速查找和插入。
  8. 堆(Heap)
    • 一种特殊的树形数据结构,通常是二叉树。
    • 最大堆或最小堆分别满足父节点大于或小于其子节点的特性。
    • 常见的应用是优先队列和堆排序。

2.输入输出、数组、字符串

输入/输出(I/O)

输入/输出(Input/Output, I/O)是算法与外界环境进行交互的方式。

  • 输入:算法开始执行前,从外部源(如用户、文件、网络等)获取的数据或信息。这些数据是算法处理的基础。

  • 输出:算法执行后,将处理结果返回给外部环境的过程。输出可以是文本、数字、图像等多种形式。

在编写算法时,需要明确指定输入和输出的格式,以确保算法的正确性和可读性。

数组

数组是一种用于存储固定大小同类型元素的顺序集合。

  • 特点

    • 数组中的元素按照它们在数组中的位置(索引)进行编号。
    • 数组的大小在创建时确定,并且之后不能更改。
    • 数组中的元素可以是任何数据类型,但所有元素的数据类型必须相同。
  • 用途:数组常用于存储和处理大量同类型数据,如排序、搜索等算法中。

  • 操作:常见的数组操作包括访问元素(通过索引)、修改元素、遍历数组等。

字符串

字符串是由一系列字符组成的文本数据。在计算机科学中,字符串通常被视为字符数组的一种特殊形式。

  • 特点

    • 字符串中的每个字符都有一个唯一的位置(索引),从0开始。
    • 字符串是不可变的,即一旦创建,就不能更改其内容(但可以通过创建新的字符串来实现修改)。
    • 字符串的长度是固定的,即它包含的字符数。
  • 用途:字符串在算法中常用于处理文本数据,如文本搜索、替换、格式化等。

  • 操作:常见的字符串操作包括连接(拼接)、切片(截取部分字符串)、查找(搜索子字符串)、替换等。

3.顺序结构、选择结构、循环结构

顺序结构

定义:顺序结构是最简单的程序结构,也是最基本的程序结构。它按照语句代码出现的先后顺序依次执行程序。

特点

  • 执行顺序是自上而下,依次执行。

  • 可以独立使用构成一个完整的程序,也可以作为程序的一部分,与其他结构一起构成复杂的程序。

示例:计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159 * r * r,然后输出圆的面积s。

选择结构

定义:选择结构(也称为分支结构)用于根据条件判断结果来控制程序的流程。

特点

  • 根据一个或多个条件选择执行不同的代码块。

  • 常见的选择结构语句有if-elseswitch-case等。

if (条件表达式1) {
    语句块1;
} else if (条件表达式2) {
    语句块2;
} else {
    语句块n;
}

注意:选择结构中的条件表达式通常有两种类型,即关系表达式和逻辑表达式。关系表达式如a > b,逻辑表达式如!(a > b)

循环结构

定义:循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。

特点

  • 根据条件重复执行一段代码。

  • 循环结构包含三个要素:循环变量、循环体和循环终止条件。

  • 循环结构有两种形式:当型循环(先判断后执行)和直到型循环(先执行后判断)。

4.函数、递归

函数(Function)

定义:函数是组织好的、可重复使用的、用来执行特定任务的代码块。函数可以提高代码的可读性、可维护性和重用性。

特点

  1. 封装性:函数将相关的代码块封装在一起,形成一个独立的单元。这使得代码更加模块化和结构化。

  2. 可重用性:函数可以被多次调用,从而避免了重复编写相同的代码。

  3. 输入与输出:函数可以接受参数(输入)并返回结果(输出)。这使得函数可以处理不同的数据,并产生相应的结果。

  4. 作用域:函数内部定义的变量和常量通常只在函数内部有效,即具有局部作用域。这有助于避免命名冲突和数据污染。

递归(Recursion)

定义:递归是一种解决问题的方法,其中函数直接或间接地调用自身来解决问题。递归通常用于处理可以分解为更小、相似子问题的问题。

特点

  1. 自身调用:递归函数在定义中直接或间接地调用自身。

  2. 基准情况:递归必须有一个或多个基准情况(base case),即不需要进一步递归调用就能直接求解的情况。基准情况是递归的出口,确保递归能够终止。

  3. 问题分解:递归通常将问题分解为更小、更简单的子问题,然后递归地解决这些子问题。

标签:函数,递归,入门篇,算法,数组,字符串,结构
From: https://blog.csdn.net/nndsb/article/details/140479656

相关文章

  • 第四届BPAA算法大赛成功举办!共研算法未来
    【编者按】BPAA大赛于2024年5月15日启动,历时一个多月,共吸引了来自各地的263个项目团队参与。7月5日,BPAA第四届全球应用算法模型典范总决赛暨峰会在上海普陀成功举办,来自金融算法模型赛道的《基于大数据多维分析的全域营销人工智能辅助平台》荣获全场大奖。本届大赛旨在推动......
  • 基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印)  2.算法运行软件版本MATLAB2022a 3.部分核心程序 fort=1:Itersfori=1:Num%目标函数更新[pa(i),fgai]=fitness(xwoa(i,:));Fitout=pa(i);%更新ifFitout......
  • golang 实现负载均衡器-一致性哈希算法负载均衡器代码实现-2.0-xunznux
    go实现负载均衡器代码细节文章目录go实现负载均衡器代码细节代码实现原理介绍版本1.0版本2.05、负载均衡器接口增加方法AddServer以加权轮询负载均衡为例展示(SelectServer增加request和AddServer的实现):6、IP散列负载均衡7、一致性哈希负载均衡策略其他内容Lab1:M......
  • 最短路算法(总结性,无Dij)
    Floyd利用中介点k进行操作记f[x][y]为xy点之间的最短路径长度其中f[x][y]=min(f[x][y],f[x][k]+f[k][y]);即用k进行松弛操作其中f[x][y]的取值当xy有直接连边时:f[x][y]=w(x,y)当无直接连边时:f[x][y]=+∞当x=y时:f[x][y]=0实现:for(k=1;k<=n;k++){for......
  • 【智能算法应用】人工兔优化算法求解二维栅格路径规划问题
    目录1.算法原理2.二维路径规划数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】人工兔优化算法(ARO)原理及实现2.二维路径规划数学模型栅格法模型最早由W.E.Howden于1968年提出,障碍物的栅格用黑色表示,可通过的自由栅格用白色表示。求解二维路......
  • 【智能算法改进】改进的麻雀搜索算法及其求解旅行商问题
    目录1.算法原理2.改进点3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】麻雀搜索算法(SSA)原理及实现2.改进点改进发现者更新位置为了使SSA算法能够避开向原点收敛的弊端,将算法向最优位置跳跃的操作转换为向最优位置的移动:......
  • Logistic回归算法原理详解及应用
    目录引言基本原理损失函数参数估计优缺点应用Logistic回归优化算法具体案例引言逻辑回归(LogisticRegression)是一种广泛用于分类问题的统计方法,尤其是二分类问题。尽管名字中有“回归”二字,但它实际上是一种分类算法,主要用于估计一个样本属于某个类别的概率。逻辑回......
  • KMP算法
    KMP算法KMP算法是一个字符串算法,通常用于匹配字符串。KMP算法的原理如果我们暴力枚举下标\(i,j\),\(i\)是文本串的下标,\(j\)是模式串(你要在文本串中匹配的字符串)的下标,时间复杂度\(O(NM)\),其中\(N,M\)分别为文本串和模式串的长度。我们看一下匹配过程:(gif动图请耐心观看)......
  • 前端面试必修--面试算法题(附带字节跳动真题pdf)
    面试算法题目录简单53.最大子数组和-力扣(LeetCode)415.字符串相加-力扣(LeetCode)206.反转链表-力扣(LeetCode)1.两数之和-力扣(LeetCode)572.另一棵树的子树-力扣(LeetCode)1410.HTML实体解析器-力扣(LeetCode)69.x的平方根-力扣(LeetCode)26.删除有序数组中......
  • 大模型算法面试题(三)
    本系列收纳各种大模型面试题及答案。1、如何评估大模型的效果及安全性一、评估大模型的效果评估大模型的效果主要关注其在特定任务上的表现能力,这通常可以通过以下几个维度来衡量:语言理解能力:语义、语法、语境:评估模型是否能够准确理解输入文本的含义、语法结构以及上......