我们登上的并非我们所选择的舞台,演出并非我们所选择的剧本。-- 爱比克泰德 (|

navyum

园龄:4个月粉丝:0关注:0

00.定义

定义

算法(algorithm)

  • 是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性:
    • 问题是明确的,包含清晰的输入和输出定义。
    • 具有可行性,能够在有限步骤、时间和内存空间下完成。
    • 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。

数据结构(data structure)

  • 是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具有以下设计目标:
    • 空间占用尽量少,以节省计算机内存。
    • 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。
    • 提供简洁的数据表示和逻辑信息,以便算法高效运行。

关系

  • 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。
  • 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。
  • 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。

算法(数据结构)设计的目标:

  • 第一层:找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。
  • 第二层:寻求最优解法:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。
    • 算法效率是衡量算法优劣的主要评价指标,它包括以下两个维度:
      • 时间效率:算法运行时间的长短。
      • 空间效率:算法占用内存空间的大小。

数据结构分类

  • “逻辑结构”和“物理结构”两个维度进行分类。

逻辑结构:线性与非线性

  • 逻辑结构揭示了数据元素之间的逻辑关:
    • 在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;
    • 在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;
    • 图则由节点和边构成,反映了复杂的网络关系。
  • 线性和非线性:
    • 线性结构比较直观,指数据在逻辑关系上呈线性排列;
      • 数组、链表、栈、队列、哈希表,元素之间是一对一的顺序关系
    • 非线性结构则相反,呈非线性排列。
      • 树、堆、图、哈希表

物理结构:连续与分散

  • 物理结构反映了数据在计算机内存中的存储方式,物理结构从底层决定了数据的访问、更新、增删等操作方法,两种物理结构在时间效率和空间效率方面呈现出互补的特点
    • 连续空间存储(数组)
    • 分散空间存储(链表)
  • 所有数据结构都是基于数组、链表或二者的组合实现的
    • 基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度>=3的数组)等。
    • 基于链表可实现:栈、队列、哈希表、树、堆、图等。

基本数据类型

  • 基本数据类型是 CPU 可以直接进行运算的类型,在算法中直接被使用:
    • 整数类型 byte、short、int、long 。
    • 浮点数类型 float、double ,用于表示小数。
    • 字符类型 char ,用于表示各种语言的字母、标点符号甚至表情符号等。
    • 布尔类型 bool ,用于表示“是”与“否”判断。
  • 基本数据类型以二进制的形式存储在计算机中 #### 与数据结构的关系:
  • 基本数据类型提供了数据的“内容类型”,而数据结构提供了数据的“组织方式

数字编码:

  • 原码
  • 反码
  • 补码

字符编码:

  • ASCII 字符集
  • GBK 字符集
  • Unicode 字符集
    • 将世界范围内的所有语言和符号都收录其中
    • Unicode 是一种通用字符集,本质上是给每个字符分配一个编号(称为“码点”),但它并没有规定如何存储这些字符码点
      • UTF-8 编码:
        • 定义:一种 Unicode 编码方法,它是一种可变长度的编码,1~4字节
        • 编码规则:
          • 对于长度为 1 字节的字符,将最高位设置为0其余7位设置为 Unicode 码点
          • 对于长度为 n 字节的字符(其中n>1),将首个字节高n位都设置为1第n+1位设置为0;从第二个字节开始,将每个字节的高2位都设置为10;其余所有位用于填充字符的 Unicode 码点。
      • UTF-16 编码:固定2或4字节
      • UTF-32 编码:固定4字节

本文作者:navyum

本文链接:https://www.cnblogs.com/navyum/p/18509354

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   navyum  阅读(16)  评论(0编辑  收藏  举报
//自己上传到博客园的js
点击右上角即可分享
微信分享提示