跳到正文 Chatgpt 说 · Jimmy Huang's Blog
← FIT5196 Seminar Week 6 学习 › C6001 › 2026 S1 › FIT5196 Data wrangling › Week 6 Data Structuring › FIT5196 Seminar Week 6 Chatgpt 说 Chatgpt 说 本页目录· 82 条 1. 本周 Seminar 总览 这周的主题是 Data Structuring(数据结构化) 。放在整个 Data Wrangling 流程里看,它承接前面的 data discovery / data collection ,也就是:前面解决“数据在哪里、怎么拿到”,这周开始解决“拿到以后怎么整理,才能让后面的清洗、转换、分析更顺”。
老师这周最核心的意思,不是让你变成“会手写数据结构的程序员”,而是让你理解一件很实用的事: 不同的数据任务,要选不同的数据结构;选错了,后面的分析会变慢、变乱、变难维护。
这周内容从基础到复杂,主线大致是:
为什么数据结构化重要
primitive types(基本数据类型)和 non-primitive types(非基本数据类型)
arrays / lists / queues / dictionaries
graphs / trees / BST / B-Tree / hash tables
课件里还包括 heaps(堆),但 transcript 里几乎没有展开说明
一句话概括这周: 这不是“背定义的一周”,而是“学会按任务选结构的一周”。
2. 核心知识点总结 知识点 1:Data Structuring 在讲什么 本页目录 效率(efficiency) :访问、修改、统计更快
数据完整性(data integrity) :更容易发现缺失、错误、不一致
可扩展性(scalability) :数据量变大时,不至于直接崩掉
和课程整体有什么关系 它是 data wrangling 的中间核心步骤。
discovery 是“知道数据在哪”
collection 是“把数据拿回来”
structuring 是“把拿回来的脏乱数据变成后面能清洗、转换、分析的形状”
如果这一步做不好,后面的 cleaning、EDA、transformation、validation 都会很痛苦。
知识点 2:Primitive Data Types(基本数据类型)
这四种类型怎么记 Integer :适合计数、索引、年龄、ID 中真正可计算的整数部分
Float :适合有小数的数值,但要记得它有精度限制
Character :一个字符,适合表示单个符号或特殊标记
Boolean :是/否、真/假、有没有、通过/未通过
一个容易混淆的点
知识点 3:Non-Primitive Data Types(非基本数据类型) 为什么重要 因为现实数据很少只是“一个数字”。
你更常面对的是: 一组记录
一段文本
一批动态增删的数据
要靠 key 快速查找的信息
和课程整体有什么关系 这就是数据结构化真正落地的地方。
你不是只知道“数据要整理”,而是要知道: 连续存适不适合
要不要频繁插入删除
要不要按顺序处理
要不要按 key 秒查
3.1 Array(数组)
3.2 String(字符串)
3.3 List / Linked List(列表 / 链表)
3.4 Queue(队列)
知识点 4:Dictionary / Hash Table(字典 / 哈希表) 和课程整体有什么关系 Data wrangling 里经常做: 一个 ID 对应一条记录
一个单词对应出现次数
一个类别对应一组统计
这些都非常适合字典 / 哈希表。
这一块最重要的不是定义,而是两个结论 平均情况下,查找可以非常快(常说 O(1))
前提是哈希函数设计得好、冲突少
Collision(冲突)是什么 不同 key 被哈希到同一个 bucket
比如两个名字最后都被分到 152 号槽位
一旦冲突多,查找性能会下降
老师口头强调的关键点
知识点 5:Graphs 和 Trees(图和树) 怎么理解(学生版) Graph 像“关系网”
Tree 像“家谱 / 文件夹层级”
图的三种常见形式
树家族里这周出现了哪些名字 Binary Tree
BST
B-Tree
AVL Tree
Red-Black Tree
Suffix Tree
Segment Tree
Trie
Quad-Tree
k-d Tree
学到什么程度合适 这周不要求你会手写这些树
但你最好知道: 它们大概是什么
适合什么任务
为什么会比“乱放数据”更高效
transcript 里一个额外重点
知识点 6:Binary Tree 与 Binary Search Tree(BST) 为什么重要 BST 是这周最像“高频考点”的结构之一,因为它同时体现了: 有序存储
高效查找
插入 / 删除 / 遍历
平衡与退化的差别
Binary Tree 里几个容易混的定义 Full Binary Tree :每个节点要么 0 个孩子,要么 2 个孩子
Complete Binary Tree :除最后一层外都满,最后一层尽量靠左
Perfect Binary Tree :所有内部节点都有 2 个孩子,所有叶子在同一层
Balanced Binary Tree :左右子树高度差不超过 1
Degenerate Binary Tree :退化树,几乎变成一条线
为什么这些定义重要 因为它们直接影响性能。
老师最强调的是: 树形状好(尤其比较平衡) -> 搜索快
树退化成一条线 -> 性能掉回 O(n)
BST 的关键优点 查找快
可以保持有序
支持插入、删除
适合范围查询
适合做索引
BST 的关键缺点 不平衡时会退化
删除内部节点时修复比较麻烦
维护平衡有额外成本
数据很大时,维护开销会上来
老师口头解释得特别细的三件事
知识点 7:Tree Traversal(树遍历) 是什么 遍历就是:按某种顺序把树中的节点访问一遍
这周重点是三种: Inorder :左 -> 中 -> 右
Preorder :中 -> 左 -> 右
Postorder :左 -> 右 -> 中
怎么理解(学生版) 把树想成一个层级目录: Inorder:左边先看,再看自己,再看右边
Preorder:自己先报到,再去左边,再去右边
Postorder:左右都处理完,最后再处理自己
这部分最重要的一个结论
老师这部分的“陷阱题” 这是很典型的 quiz 风格题: 表面在问顺序
实际在考你有没有理解“都访问了所有节点”
知识点 8:B-Tree 与 Heap(课件补充)
8.1 B-Tree 为什么重要 可以减少树太深的问题
更适合一些实际系统里的索引需求
8.2 Heap(堆) 是什么 一种满足 heap property 的树结构
Max-Heap :根节点最大
Min-Heap :根节点最小
为什么重要 适合 priority queue(优先队列)
适合 heapsort
也会出现在图算法里
怎么理解 它不是“全局完全排序”
而是保证“最重要的那个在顶上”
3. 老师强调的重点
明确高频重点 1:为什么 data structuring 很重要
明确高频重点 2:字段要选对数据类型 你该掌握到什么程度 会判断一个字段最适合哪种类型
会解释“为什么其他类型不合适”
明确高频重点 3:不是让你手写实现,而是让你会“选” 隐含重点 以后碰到题目,可能不是问你怎么手写树或哈希表
而是问你: 这个任务该选哪种结构,为什么
明确高频重点 4:BST 的逻辑、优势、局限 你该掌握到什么程度 能口头解释: 为什么 BST 查找快
什么情况下快
什么情况下会退化变慢
删除为什么比查找更麻烦
明确高频重点 5:Traversal 顺序 + “效率陷阱题” 判断理由 老师专门用它做课堂题
还提醒大家不要只凭直觉选 preorder
你该掌握到什么程度 记住三种顺序
更重要的是理解: 遍历整棵树时,它们都要访问所有节点
所以复杂度量级并不会因为名字不同就本质改变
明确高频重点 6:Dictionary / Hash Table + collision 你该掌握到什么程度 能解释: key-value 是什么
hash function 做什么
bucket 是什么
collision 为什么会让性能变差
明确高频重点 7:Queue 的抽象性和实现差异 判断理由 老师并不满足于只说 FIFO
还展开讲 array 实现为什么出队麻烦
你该掌握到什么程度 会说 queue 是 FIFO
也知道: 同一个抽象结构,底层实现不同,性能会不同
隐含重点:这周真正考的是“结构与任务匹配”
4. transcript 里补充的重要信息
课件没写得这么细,但老师口头补充了这些 现代 data collection 可能很简单,但 structuring 才是开始“真正动手”的地方 年龄字段的例子是很强的实务提醒 string 会让计数、比较、计算都变麻烦
float 会让不该出现的小数混进来
这体现的是“类型选择服务于任务”
Character 虽然平时不常被重视,但适合存单个特殊标记 Queue 的重点不是定义,而是“为什么 array 出队麻烦” Dictionary / hash table 的最好理解方式是“key 快速定位 record” 老师强调:现代库已经实现好了,学生重点是“会判断、会用” 这是 transcript 里反复说的
对复习方向很重要:重理解,轻手写底层实现
Quiz 的官方规则要看 Lecture 0 / Unit 0
资料中需要澄清 / 对齐的地方 “搜索最优是 O(log n)”这句话要放在 BST 语境里理解 老师在讲 balanced BST 时强调 O(log n)
但后面 hash table 又讲到平均 O(1)
所以别把它理解成“所有数据结构的搜索最好都只能 O(log n)”
Heap 在课件里有完整内容,但 transcript 里几乎没讲
5. 这周最可能要掌握的考点 / 作业相关点
很可能会考 / 会出现在 quiz 里的内容
1)Data structuring 为什么重要
2)字段类型选择
3)Primitive vs Non-Primitive 理由 这是课件结构主干
老师专门从这里过渡到后面的更复杂结构
你要会答 区别是什么
各自典型例子是什么
为什么 primitive 通常更快、更省空间
4)Queue 的 FIFO 与实现差异
5)BST:定义、平衡性、搜索/插入/删除、遍历
6)Traversal 的“效率陷阱题”
7)Dictionary / Hash Table / Collision
可能和 assignment / 后续课程相关的内容
1)“选对结构”而不是“手写结构” 这很像 assignment 或实际项目中的要求
你可能需要解释: 为什么这里用 dict 不用 list
为什么这里适合 queue
为什么这里要先把文本变成表
2)Suffix tree / 文本相关结构
3)后续会用到 structuring 的地方
本周还有非常实际的 assessment 提醒
6. 我应该怎么学这周内容
推荐学习顺序
第 1 步:先把“这周到底在解决什么问题”讲明白
第 2 步:把“类型选择”学扎实
第 3 步:学会按任务选线性结构 还是看 第 10–12 页 ,配合 transcript
重点问自己:
我要的是按位置快速访问,还是动态插入删除?
我要的是顺序处理,还是 key 查找?
我要的是文本存储,还是频率统计?
第 4 步:重点攻 BST 重点看课件 第 18–25 页
这是这周最值得手画一遍的部分:
第 5 步:再学 hash table 看课件 第 27–32 页
重点不是背定义,而是用老师那个例子自己复述一遍:
学号为什么适合当 key
hash function 在做什么
collision 为什么危险
第 6 步:最后扫 graph / tree family / heap 看课件 第 15–17 页、33–37 页
这一轮目标是“认识 + 会说用途”
我必须先搞懂的基础概念 Data type 和 data structure 不是一回事 type 更像“这个字段是什么性质”
structure 更像“这一堆数据怎么组织”
树快不快,和平不平衡关系很大
哈希表快不快,和冲突多少关系很大
哪些内容属于“理解型” 为什么 data structuring 是 wrangling 的关键步骤
为什么 age 用 integer 更合理
为什么 queue 用 array 出队会麻烦
为什么 BST 平衡时快、退化时慢
为什么 hash table 平均快但 collision 会拖慢
为什么遍历方式不同,但遍历整棵树的复杂度量级差不多
哪些内容属于“记忆型” Primitive types:integer / float / char / boolean
Non-primitive 代表:array / string / list / queue / dictionary
Graph 的三种:directed / undirected / weighted
Traversal 顺序: inorder:左中右
preorder:中左右
postorder:左右中
哪些内容属于“应用型”
哪些内容只需要了解
哪些内容需要重点掌握 data structuring 的意义
字段类型选择
array / list / queue / dictionary 的使用场景
BST 的逻辑与优缺点
traversal 顺序与用途
hash table 的 key / hash / bucket / collision
这周最容易混淆的地方 Data type vs Data structure
List vs Queue list 是更一般的容器
queue 是有 FIFO 规则的抽象结构
Dictionary vs Hash Table dictionary 是“键值映射”的概念
hash table 常是它的实现方式
Full / Complete / Perfect / Balanced BST 的 O(log n) vs Hash table 的 O(1) Traversal 顺序 vs Traversal 效率
学完后,你应该能回答这些问题,才算真的掌握 为什么 data structuring 是 data wrangling 的核心环节之一?
discovery、collection、structuring 分别在做什么?
年龄为什么更适合 integer,而不是 string 或 float?
queue 为什么叫 FIFO?为什么用 array 实现出队会麻烦?
dictionary / hash table 为什么比 list 更适合“学号找记录”?
collision 是什么?为什么它会让 hash table 变慢?
BST 为什么能加速查找?
BST 为什么在退化时会失去优势?
inorder / preorder / postorder 分别是什么?
为什么 inorder 在 BST 中常能输出排序结果?
为什么老师说重点不是手写实现,而是会选结构?
当数据是文本、关系网络、优先级任务时,你分别会想到什么结构?
7. 给我一份简短复习清单
8. 如果我是初学者,你再用更简单的话解释一遍
第一步:先知道东西在哪
第二步:把东西拿回来
第三步:把东西分门别类放好 数据拿回来以后,如果还是乱的,后面分析会很痛苦
所以你要学会“用合适的盒子装合适的东西”
这些“盒子”是什么 Integer :装整数
Float :装小数
Boolean :装“是/不是”
String :装文字
Array :像连续的一排小格子
List :像一串连起来的小纸条
Queue :像排队买饭,先来先服务
Dictionary :像“学号 -> 学生信息”这种查表系统
Tree :像家谱或文件夹层级
BST :一种特别会“按大小分类放东西”的树
Hash Table :一种让你能很快按 key 找东西的结构
Heap :一种保证“最大或最小的先放在最上面”的结构
最实用的一句总结 这周不是要你变成“数据结构专家”,而是要你会判断:
再压缩成一句话 Week 6 真正要会的,不是背很多名词,而是:把“数据怎么放”这件事,和“我后面要怎么分析它”连起来。