洋仔的博客 洋仔的博客
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

洋仔

奋斗的小青年
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • iOS基础知识

    • iOS底层相关

    • Runloop系列

    • Runtime系列

    • 内存管理系列

    • Block系列

    • 线程系列

    • KVC跟KVO系列以及通知中心

    • UI系列

    • 离屏渲染系列

    • 组件化系列跟架构

    • OC跟webview交互系列

    • 持久化系列

    • APP编译系列

    • APP性能优化系列

    • cocoapods系列

    • swift系列

    • Git系列

    • 网络相关

    • 三方库系列

    • 系统原理

    • 总结系列

    • 算法系列

      • 构建自己的算法体系
      • 算法入门
        • 算法架构图解
        • 算法入门
        • 1.线性结构
        • 2.非线性结构
        • 基本算法思想
        • 常见经典算法
      • 时间复杂度跟空间复杂度
      • 递归算法
      • 分治算法
      • 动态规划算法
      • 贪心算法
      • 回溯算法
      • 枚举算法
      • 排序算法
      • 双指针算法技巧
    • 数据结构系列

  • 前端

  • 技术
  • iOS基础知识
  • 算法系列
洋仔
2024-10-16
目录

算法入门

# 算法架构图解

suanfatixi

# 算法入门

当我们谈论算法时,我们谈论的是解决问题的方法和步骤。在计算机科学中,算法是一系列明确定义的指令,用于执行特定任务或解决特定问题。算法在各个领域都起着至关重要的作用,从数据处理到人工智能,无处不在。

一、算法简介 1.1 什么是算法 算法可以被视为一种计算过程,通过一系列有序的步骤来执行特定的任务。它是一种数学概念,通常由一组输入、输出和执行步骤组成。一个好的算法应该是正确的、高效的,并且适用于特定问题。

1.2 算法的特性 明确定义: 算法应该具有明确的步骤,对于任何给定的输入,都应该产生确定的输出。 有限性: 算法必须在有限步骤内结束,不会无限循环或无法终止。 输入: 算法可以有零个或多个输入,这些输入是用来执行特定任务的数据。 输出: 算法应该产生一个或多个输出,以表示完成任务的结果。 1.3 算法的度量指标 时间复杂性: 衡量算法执行所需时间的指标,通常用大O表示法来表示。较低的时间复杂性通常意味着更高的性能。O(f(n)):n为问题的规模,f(n)为执行次数的系数为1的最小阶,O(f(n))表示时间复杂度。 空间复杂性: 衡量算法在执行过程中所需内存空间的指标。与时间复杂性类似,我们希望尽量减少算法的空间占用。表示与世界复杂度一样。

i++ 和 ++i 有什么区别

++i 先使 i 先自加一,然后返回 i

i = 1; j = ++i; (i is 2, j is 2)

i++ 先返回 i,再使 i 自加一,

i = 1; j = i++; (i is 2, j is 1)

# 二、算法知识框架

  • 线性数据结构:数组、链表、栈、队列、哈希表,元素之间是一对一的顺序关系。
  • 非线性数据结构:树、堆、图、哈希表。

非线性数据结构可以进一步划分为树形结构和网状结构。

  • 树形结构:树、堆、哈希表,元素之间是一对多的关系。
  • 网状结构:图,元素之间是多对多的关系。

值得说明的是,所有数据结构都是基于数组、链表或二者的组合实现的。例如,栈和队列既可以使用数组实现,也可以使用链表实现;而哈希表的实现可能同时包含数组和链表。

  • 基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度  的数组)等。
  • 基于链表可实现:栈、队列、哈希表、树、堆、图等。

链表在初始化后,仍可以在程序运行过程中对其长度进行调整,因此也称“动态数据结构”。数组在初始化后长度不可变,因此也称“静态数据结构”。值得注意的是,数组可通过重新分配内存实现长度变化,从而具备一定的“动态性”。

# 1.线性结构

  • 数组

  • 链表

    • 单向链表

    • 环形链表

    • 双向链表

  • 栈

  • 队列

    • 单向队列

    • 双向队列

  • 哈希表

# 2.非线性结构

  • 二叉树

    • 完美二叉树

    • 完全二叉树

    • 完满二叉树

    • 平衡二叉树

    • 二叉搜索树

  • 多叉树

  • 堆

    • 大顶堆

    • 小顶堆

  • 图

    • 邻接矩阵

    • 邻接表

# 算法系列架构

# 基本算法思想

  • 贪心算法

  • 分治算法

  • 动态规划算法

  • 回溯算法

  • 枚举算法

  • 递归算法

# 常见经典算法

  • 排序

  • 搜索

  • 查找

  • 字符串匹配

  • 其他

#

编辑 (opens new window)
上次更新: 2024/10/23, 23:26:17
构建自己的算法体系
时间复杂度跟空间复杂度

← 构建自己的算法体系 时间复杂度跟空间复杂度→

最近更新
01
数组
10-25
02
数组双指针系列之对撞指针
10-25
03
数组双指针系列之快慢指针
10-25
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式