AIUnlimited
🌳

AI基础

🌱
AI 种子

从零开始

🌿
AI 萌芽

打好基础

🌳
AI 枝干

付诸实践

🏕️
AI 树冠

深入探索

🌲
AI 森林

精通AI

🔨

AI精通

✏️
AI 草图

从零开始

🪨
AI 雕刻

打好基础

⚒️
AI 匠心

付诸实践

💎
AI 打磨

深入探索

🏆
AI 杰作

精通AI

📘

AI实战

📖
理解开源模型

开源模型的基础知识和资源

🎯
问题到模型任务

将业务问题转化为模型任务

⚡
跑通第一个模型

30分钟快速看到第一个结果

🔧
微调与评测

微调模型并评估性能

🚀
应用系统

构建实际AI应用系统

🎨
生成式AI

探索AIGC的开源模型

🤖
Agent智能体

学习Agent框架和MCP工具

📐
基础补充

LLM基础知识和评测

🎓

Claude 学院

🤖
Claude 101 入门

用 Claude 学习 AI 基础知识

💻
Claude Code 101 入门

让 Claude 成为你的结对编程伙伴

🤝
Claude Cowork 入门

与 Claude 协作完成复杂项目

⚙️
Claude 平台 101

使用 Claude API 构建应用

实验室

已加载 7 个实验
🧬神经网络沙盒🤖AI 还是人类?🥋提示工程道场🏁算法竞速🧠AI 知识挑战🏗️系统设计画布
🎯模拟面试进入实验室→
🚀

职业发展

🚀
面试发射台

开启你的旅程

🌟
行为面试精通

掌握软技能

💻
技术面试

通过编程轮次

🤖
AI与ML面试

ML面试精通

🏆
Offer与未来

拿下最好的Offer

立即开始
AIUnlimited

AI 教育平台

沪ICP备18025655号-11

学习

  • AI基础
  • AI实战
  • Claude学院
  • 实验室
  • 职业发展

社区

  • 关于
  • 常见问题

支持

  • 服务条款
  • 隐私政策
  • 联系我们
AI & 工程学习计划›✏️ AI 草图›课程›数组与哈希表
📦
AI 草图 • 中级⏱️ 15 分钟阅读

数组与哈希表

为什么数据存储在人工智能中很重要

每个人工智能系统都需要快速存储和检索数据。无论是图像中的像素值列表、50,000 个单词的词汇表,还是数百万个用户偏好,数据结构的选择决定了 AI 的思考速度。

两种结构占主导地位:数组和哈希映射。掌握这些,你就为几乎所有人工智能管道奠定了基础。

数组 - 具有即时访问功能的有序列表

数组只是并排存储在内存中的项目的编号列表。每个项目都有一个索引 - 它在列表中的位置,从零开始。

index:   0       1       2       3       4
value: ["cat", "dog", "bird", "fish", "frog"]

由于项目彼此相邻,因此您可以直接跳到任何位置。想要第 3 项吗?完成 - 无需搜索。这是 O(1) 访问,这意味着无论数组包含 10 个项目还是 1000 万个项目,都需要相同的时间。

五个元素组成的数组,索引为 0 到 4,显示对索引 3 的直接访问
数组允许您使用其索引直接跳转到任何位置。

当数组闪耀时

  • 特征向量:图像可以表示为 784 个数字(28×28 像素)的数组,每个数字保存一个亮度值。
  • 嵌入:语言模型将单词含义存储为数百个浮点数的数组。
  • 批处理:训练数据加载到数组中,以便 GPU 可以同时处理数千个示例。

陷阱

在中间插入或移除物品的成本很高。更改后的每个项目都必须随机排列。那是 O(n) - 项目越多,花费的时间就越长。

🤔
Think about it:

如果您有一个包含 10,000 首歌曲的播放列表,并且想要在位置 5 插入新曲目,则位置 5 以后的每首歌曲都需要移动。流媒体服务如何在不减慢速度的情况下处理这个问题?

哈希映射 - 按名称即时查找

哈希映射(也称为字典或哈希表)将数据存储为键值对。您可以通过有意义的键来访问项目,而不是通过索引号来访问项目。

word_counts = {
  "hello": 42,
  "world": 37,
  "AI": 156
}

需要计算“AI”吗?哈希映射使用哈希函数在幕后将键转换为索引。结果呢? O(1) 平均查找时间 - 就像数组一样,但使用名称而不是数字。

🤯

Python 的字典是哈希映射。当 ChatGPT 在训练期间计算单词频率时,它使用类似哈希映射的结构来跟踪整个互联网文本中数十亿个单词的出现。

哈希图的真正人工智能用途

  • 词汇映射:将“brilliant”等单词转换为语言模型的标记 ID 8921。
  • 频率计数:每个单词在数据集中出现的频率是多少?哈希图一次性回答了这个问题。
  • 缓存结果:如果人工智能已经计算了输入 X 的预测,请将其存储起来,这样您就永远不会重新计算。

时间复杂度变得简单

|运营|数组|哈希映射 | |------------|--------|----------| |通过索引访问 | O(1) ⚡ |不适用 | |通过钥匙访问 | O(n) 🐢 | O(1) ⚡ | |在末尾插入 | O(1) ⚡ | O(1) ⚡ | |插入中间 | O(n) 🐢 |不适用 | |寻找价值 | O(n) 🐢 | O(1) ⚡ |

将 O(1) 视为“即时,无论大小”,并将 视为“数据越大,速度越慢”。

第 1 课,共 10 课已完成 0%
←返回学习计划

讨论

登录 参与讨论

O(n)
🧠小测验

您有 100,000 个用户个人资料,需要通过用户名查找用户。哪种结构最快?

常见模式:频率计数

面试和人工智能中最有用的模式之一是计算发生次数。这是伪代码的想法:

counts = {}
for each word in text:
    if word in counts:
        counts[word] = counts[word] + 1
    else:
        counts[word] = 1

通过一次浏览文本就可以知道每个单词的频率。语言模型正是使用这种方法(大规模)来理解哪些单词最重要。

常见模式:二和问题

给定一个数字数组和一个目标,找到两个数字相加等于目标值。简单的方法检查每一对 - O(n²)。聪明的方法使用哈希图:

seen = {}
for each number in array:
    complement = target - number
    if complement in seen:
        return [seen[complement], current_index]
    seen[number] = current_index

一次通过,O(n) 时间。哈希映射会记住您已经看到的内容。

🧠小测验

为什么哈希映射方法进行二和比检查每对更快?

何时选择

  • **当顺序很重要时,您可以按位置访问项目,或者您需要按顺序处理所有内容(例如图像中的像素),请使用数组。
  • **当您需要通过键快速查找、想要计算出现次数或需要快速检查某些内容是否存在时,请使用哈希映射。
🤔
Think about it:

推荐引擎在推荐之前需要检查用户是否已经观看过电影。您会将用户的观看历史记录存储在数组还是哈希映射中?想到什么权衡?

🧠小测验

AI 模型将词嵌入存储为每个包含 300 个数字的数组。为什么数组是一个不错的选择?

要点

  • 数组 通过索引提供 O(1) 访问,是数值 AI(图像、嵌入、张量)的支柱。
  • 哈希映射 通过键提供 O(1) 访问,对于查找、计数和缓存至关重要。
  • 选择正确的结构可以将 O(n²) 算法转变为 O(n) 算法 - 在处理数百万个数据点时,这一差异很重要。
  • 在实践中,大多数人工智能管道同时使用:用于数值计算的数组和用于元数据查找的哈希图。