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

数据结构:导论

目录

什么是“第一性原理”?

什么是“数据结构”?

数据结构解决的根本问题是什么?

数据结构的两大分类

数据结构的基本操作

数据结构与算法的关系

学习数据结构的底层目标


什么是“第一性原理”?

在正式进入数据结构之前,我们先要厘清一个核心学习方法 —— 第一性原理(First Principles Thinking)。

第一性原理是指:将问题分解到最基本、最不可再简化的真理,再从这些基础出发,逐步构建出复杂系统。

在学习数据结构时,我们不是去“记住”链表或栈的定义,而是要问:

  • 信息为什么需要结构化?

  • 什么是“数据”?

  • 为什么某些结构比其他结构更高效?

这些追问,就是从底层理解“数据结构”的真正方式。

什么是“数据结构”?

数据结构是一种组织、管理和存储数据的方法,使得我们能够高效地访问(access)和修改(modify)数据。

用类比来说:

  • 数据是信息的原材料;

  • 数据结构是存储这些信息的“容器”或“建筑架构”;

  • 算法(Algorithm)是使用这些数据的“操作方法”或“工具”。

举个生活中的例子:

假设你有很多图书,如果你用一个盒子乱装(未使用数据结构),查找某本书要花很长时间。如果你按作者排序放进书架(使用结构化的存储),查找速度就快得多。

数据结构的本质作用就是为信息组织提供一种有序、高效的框架,帮助我们实现以下三大目标:

  1. 更快地访问数据(Access)

  2. 更节省地存储数据(Storage)

  3. 更灵活地修改数据(Modify)

Harsha 在课程中强调:算法和数据结构是两翼,缺一不可。算法提供策略,结构决定效率。

数据结构解决的根本问题是什么?

用第一性原理回溯,我们可以这样问:我们为什么需要数据结构?

我们要解决的问题主要包括:

  1. 存储(Storage):如何有效存储大量数据?

  2. 访问(Access):如何快速地找到我需要的数据?

  3. 修改(Modification):如何快速更新或删除数据?

  4. 扩展性(Scalability):当数据量变得很大时,系统是否还能正常运行?

数据结构的三大核心指标:

中文术语英文术语说明
时间复杂度Time Complexity处理数据需要多长时间(O(n)、O(log n) 等)
空间复杂度Space Complexity占用多少内存或存储资源
可扩展性Scalability随着数据量增长性能是否可控

他强调:“设计数据结构就是在不同指标之间做权衡(Trade-off)。”

简而言之:

 数据结构存在的根本目的是:用更少的时间和空间,完成更多的数据处理任务。

数据结构的两大分类

(Two Major Categories of Data Structures)

1. 线性结构(Linear Data Structures)

数据元素按线性顺序排列,每个元素最多只有一个前驱和一个后继。

名称(中文)

名称(英文)

示例

数组

Array

[1, 2, 3, 4]

链表

Linked List

1 -> 2 -> 3

Stack

后进先出 LIFO

队列

Queue

先进先出 FIFO

这些结构适合处理“有顺序”的数据。


2. 非线性结构(Non-Linear Data Structures)

数据之间的关系不是线性的,一个元素可能连接多个元素。

名称(中文)

名称(英文)

示例

Tree

文件目录结构

Graph

社交网络,地图

Heap

优先队列

哈希表

Hash Table

键值存储(key-value)

这些结构用于表达复杂关系,比如父子关系、网络结构等。

数据结构的基本操作

无论哪种数据结构,都要支持以下基本操作(Basic Operations):

  • 插入(Insertion):添加新元素

  • 删除(Deletion):移除已有元素

  • 查找(Searching):定位某个特定元素

  • 遍历(Traversal):访问所有元素

  • 排序(Sorting):按特定顺序组织数据

每种操作的效率依赖于你选择的数据结构。

数据结构与算法的关系

数据结构是用来存储数据的,算法是处理数据的。

它们之间的关系如下:

数据结构算法
是房子是住在房子里的人
是刀鞘是刀
是存储器是处理器

比如:使用哈希表(Hash Table),你可以在O(1) 时间内查找数据。这就是结构与操作的完美结合。

学习数据结构的底层目标

学习数据结构不是为了背公式,而是为了掌握一种解决问题的思维框架(problem-solving mindset):

  • 如何选择最合适的结构?(Trade-offs:时间 vs 空间)

  • 如何让代码变得更快、更稳定、更易维护?

  • 如何通过“结构”的设计,获得“算法”的力量?

 

http://www.xdnf.cn/news/733969.html

相关文章:

  • SpringBatch+Mysql+hanlp简版智能搜索
  • matlab计算转子系统的固有频率、振型、不平衡响应
  • StringBuilder对象的操作
  • cocos creator资源管理器,资源动态加载和释放
  • 基于Qt封装数据库基本增删改查操作,支持多线程,并实现SQLite数据库单例访问
  • 【google 论文】Titans: Learning to Memorize at Test Time
  • 裂缝仪在线监测装置:工程安全领域的“实时守卫者”
  • DrissionPage WebPage模式:动态交互与高效爬取的完美平衡术
  • C# 将HTML文档、HTML字符串转换为图片
  • Window10+ 安装 go环境
  • 深入探索:基于 Nacos 的配置管理之动态配置与环境管理
  • Lifecycle原理
  • 低秩矩阵、奇异值矩阵和正交矩阵
  • 【FlashRAG】本地部署与demo运行(一)
  • ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析
  • AI时代的园区网变革:“极简”行至最深处,以太彩光恰自来
  • 【C++】位图
  • 前端pointer-events属性
  • 显卡3080和4060哪个强 两款游戏性能对比
  • 重拾Scrapy框架
  • Clish中xml文件配置的使用方法
  • Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
  • 【专题】神经网络期末复习资料(题库)
  • 二、Python提供了丰富的内置工具,无需额外安装即可使用
  • 6个月Python学习计划 Day 9 - 函数进阶用法
  • 【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
  • 单卡4090部署Qwen3-32B-AWQ(4bit量化)-vllm
  • 网易 - 灵犀办公文档
  • const ‘不可变’到底是值不变还是地址不变
  • Python使用