# Lecture 9: Streaming and Sketching II - 内容总结

# Part1 引入流式算法以及解决方案

# 🧩 课程引入:流式算法的挑战

  • 数据以流的形式连续到达,不能全部存储。
  • 算法 A 读取前一部分数据后输出结果 21.5
  • 结果还没来得及用,更多的数据又到达了。
  • 再运行 A 得到新的结果 18.1
  • 关键问题: 如何把两个结果合并成一个整体答案?

# 🧠 引入 Sketching 的概念

  • 对每段数据 σ ,算法 A 生成一个摘要: S(σ) ,称为 sketch
  • 特性:
    • S(σ) 是对数据的压缩表示;
    • 可以从 S(σ) 还原出我们要解决问题的近似答案;
    • 不同问题需要不同的 sketch 设计(problem-dependent)。

# 🔗 组合 Sketch 的想法

  • 若有两个数据段 σ₁σ₂ ,分别生成 sketch:
    • S(σ₁)S(σ₂)
  • 希望能通过某个函数 f 合并它们:
    • f(S(σ₁), S(σ₂)) ≈ S(σ₁ ∘ σ₂)
  • 这样我们就不需要重新处理原始数据,而是只用合并 sketch

# 💪 更进一步:线性 Sketching(Linear Sketch)

  • 特别理想的情况是:sketch 之间可以直接加法合并
    • S(σ₁ ∘ σ₂) = S(σ₁) + S(σ₂)
  • 图示用《龙珠》角色合体的方式表达这种 “强强联合” 的能力。

# 🧮 数学表示

  • Sketch 函数 S 可视为从高维空间 ℝⁿ 到低维空间 ℝᵏ 的变换:
  • S: ℝⁿ → ℝᵏ where k ≪ n
  • Sketch 通常是向量,因此 “加法” 指的是向量加法。
  • S 是随机函数,不依赖于原始输入的存储。
  • 合并两个 sketch 后,你仍可以从中获取目标问题的近似答案。
  • 即通过 s 函数将 n 进行降维到 k,我们不需要考虑原始的数据而只需要考虑 k 的数据,压力会小得多。

# ✅ 小结

  • 流式处理适用于数据量大、内存有限、只能单次扫描的场景。
  • Sketch 是一种压缩表示,保留关键信息。
  • 线性 sketch 允许我们把多个 sketch 相加,从而处理整个数据流。
  • 这种方法适合分布式处理、实时系统、高效内存使用等场景。

# 📊 Misra-Gries 与 sketch

# 1. Misra-Gries

# 🌟 1.1 Misra-Gries 是什么?

Misra-Gries 是一个 流式处理算法,用于在 内存受限 的情况下,找出数据流中出现频率较高的元素(Heavy Hitters)。


# 🧩 1.2 要解决的问题

给定一个数据流,找出所有出现次数大于某个阈值(比如 10%)的元素。

  • 不保存整个数据流;
  • 只扫描一次;
  • 使用极少的内存;
  • 返回一个 “可能频繁” 的元素列表(近似)。

# 🛠️ 1.3 算法流程(输入参数:允许误差 ε)

使用一个最多存 k = ⌊1/ε⌋ 个元素及其计数的哈希表:

# 步骤:
  1. 初始化一个空表 C (最多 k-1 个元素);
  2. 对于数据流中的每个元素 x
    • 如果 x ∈ C :将其计数加 1;
    • 如果 x ∉ C 且表未满:将 x 加入表中,计数设为 1;
    • 如果 x ∉ C 且表已满:将所有计数器减 1,删除计数为 0 的元素。

# 💡 1.4 举个例子

数据流: A, B, A, C, A, B, D, A, C, C, C, C, B, ...
使用 Misra-Gries,可能发现:
A: 频繁
C: 频繁
B: 可能
D: 被忽略


# 📏 1.5 准确性保证(误差控制)

  • 算法输出一个近似频率向量 𝑓̂
  • 满足误差上界:‖𝑓 - 𝑓̂‖_∞ ≤ ε ‖𝑓‖₁
  • 即最大误差不超过总出现次数的 ε 倍。

# 📦 1.6 空间与时间复杂度

指标复杂度
时间复杂度每个元素 O(1)
空间复杂度O(1/ε) 个计数器

# 🔁 1.7 特点总结

特性描述
✅ 单次扫描只遍历数据一次
✅ 确定性非随机,输出固定
✅ 空间效率高跟踪少量元素就能估计全局
✅ 控误差误差最多 ε × 总数量
❌ 不可合并不是线性 sketch,不能合并多个子数据流的结果
🧾 适用模型cash register model(只加不减)

# 🧠 1.8 用途

  • 找最常见的 IP 地址
  • 检测最常点击的链接
  • 实时舆情监控
  • 高频交易流分析

# 2. 📘 Misra-Gries 与 Heavy Hitters - 幻灯片总结


# 第 1 页:Misra-Gries 算法回顾

# 📌 主要内容
  1. Misra-Gries 是一个 sketching 算法

    • 它可以近似记录频繁元素的信息;

    • 但注意,不是 “线性” sketch(见第 3 点)。

  2. 不是线性 sketching 算法

    • 意思是:不能把两个 sketch(比如两段数据流的 MG 结果)直接合并为整体结果;

    • 限制了它在分布式或合并式处理中的应用。

  3. 输出误差保证

    • 输出一个估计频率向量 𝜓 ∈ ℝⁿ ,满足:

      1
      ‖𝜓 - 𝜓‖∞ ≤ ε‖𝜓‖₁

      其中:

      • ‖𝜓‖₁:数据流中所有元素的总出现次数;

      • ‖・‖∞:最大元素误差;

      • ε:误差容忍度;

    • 这是在 cash register model 下成立的(只加不减)。


# 🧾 左下角范数符号说明:
  • ‖x‖∞ = max |xᵢ| :最大值范数;

  • ‖x‖₁ = ∑ |xᵢ| :L1 范数(总和);


# 第 2 页:Heavy Hitters 中的范数 ℓ₁, ℓ₂, ℓ∞ 等

# 📌 不同范数的作用
  • ℓₚ范数定义:

    1
    ‖𝜓‖ₚ = ( ∑ |fᵢ|ₚ )^(1/p)

# ✨ 重点范数:
符号意义
‖𝜓‖₀非零元素个数(等价于不同元素数)
‖𝜓‖₁所有元素频率的总和(数据流总长度)
‖𝜓‖₂衡量数据流的 “方差”(振荡性)
‖𝜓‖∞最大元素的频率

具体相关的概念在随机算法基础文章中有记录

  • 常用事实:

    1
    ‖𝜓‖∞ ≤ ‖𝜓‖₂ ≤ ‖𝜓‖₁

# 💡 为什么重要?
  • 有些算法提供 ε\2016𝜓\2016₂ 误差控制;

  • ε\2016𝜓\2016₁ 的误差界限更宽松,因此 ℓ₂ 保证更强;

  • 选择不同 sketch 技术时,通常根据你希望控制的范数来决定使用哪种算法。


# 🔄 轻微推广(Generalization)

讲的是如何将 sketch 技术用于稍微复杂的数据结构,比如:

  • 输入是 (element, count) 对;

  • 最终可以保证:

    1
    ‖𝜓‖₂ ≤ m × B

    其中:

    • m 是不同元素数量;

    • B 是最大计数的大小。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

IRON 微信支付

微信支付

IRON 支付宝

支付宝

IRON 贝宝

贝宝