open-courses
  • 公开课笔记
  • CMU 15-445/645 Database Systems
    • Relational Data Model
    • Advanced SQL
    • Database Storage
    • Buffer Pools
    • Hash Tables
    • Tree Indexes
    • Index Concurrency Control
    • Query Processing
    • Sorting&Aggregations
    • Join Algorithms
    • Query Optimization
    • Parallel Execution
    • Embedded Database Logic
    • Concurrency Control Theory
    • Two Phase Locking
    • Timestamp Ordering Concurrency Control
    • Multi-Version Concurrency Control
    • Logging Schemes
    • Database Recovery
    • Introduction to Distributed Databases
    • Distributed OLTP Databases
    • Distributed OLAP Databases
  • UCB - CS162
    • OS intro
    • Introduction to the Process
    • Processes, Fork, I/O, Files
    • I/O Continued, Sockets, Networking
    • Concurrency: Processes & Threads
    • Cooperating Threads, Synchronization
    • Semaphores, Condition Variables, Readers/Writers
    • Scheduling
    • Resource Contention & Deadlock
    • Address Translation, Caching
    • File System (18,19,20)
    • Distributed Systems, Networking, TCP/IP, RPC (21,22)
    • Distributed Storage, Key-Value Stores, Security (23)
    • Security & Cloud Computing (24)
    • Topic: Ensuring Data Reaches Disk
  • MIT - 6.006
    • Sequence and Set Interface
    • Data Structure for Dynamic Sequence Interface
    • Computation Complexity
    • Algorithms and Computation
    • Structure Of Computation
    • Graph & Search
    • Tree & Search
    • Weighted Shortest Paths
    • String Matching, Karp-Rabin
    • Priority Queue Interface & Implementation
    • Dictionary Problem & Implementation
    • Sorting
    • Dynamic Programming
    • Backtracking
    • Self-Balancing Tree
  • MIT - 6.824
    • 2PC & 3PC
    • Introduction and MapReduce
    • RPC and Threads
    • Primary/Backup Replication
    • Lab: Primary/Backup Key/Value Service
    • Google File System (GFS)
    • Raft
    • Lab: Raft - Leader Election
    • Lab: Raft - Log Replication
  • Stanford-CS107
    • 原始数据类型及相互转化
    • 指鹿为马
    • 泛型函数
    • 泛型栈
    • 运行时内存结构
    • 从 C 到汇编
    • 函数的活动记录
    • C 与 C++ 代码生成
    • 编译的预处理过程
    • 编译的链接过程
    • 函数的活动记录续、并发
    • 从顺序到并发和并行
    • 信号量与多线程 1
    • 信号量与多线程 2
    • 复杂多线程问题
    • 函数式编程 - Scheme 1
    • 函数式编程 - Scheme 2
    • 函数式编程 - Scheme 3
    • 函数式编程 - Scheme 4
    • 函数式编程 - Scheme 5
    • Python 基础
  • MIT - 6.001 - SICP
    • 什么是程序
    • 程序抽象
    • 替代模型
    • 时间/空间复杂度
    • 数据抽象
    • 高阶函数
    • Symbol
    • 数据驱动编程与防御式编程
    • 数据抽象中的效率与可读性
    • 数据修改
    • 环境模型
    • 面向对象-消息传递
    • 面向对象 - Scheme 实现
    • 构建 Scheme 解释器
    • Eval-Apply Loop
    • Normal Order (Lazy) Evaluation
    • 通用机
    • 寄存器机器
    • 子程序、栈与递归
    • 在寄存器机器中执行
    • 内存管理
  • MIT - 6.046
    • Randomized Algorithms
    • Skip Lists
  • System Design
    • Twitter
    • Cache Consistency & Coherence
  • DDIA 笔记
    • Replication
    • Transactions
    • The Trouble with Distributed Systems
    • Consistency & Consensus
  • Papers We Love
    • Consistent Hashing and Random Trees (1997)
    • Dynamic Hash Tables (1988)
    • LFU Implementation With O(1) Complexity (2010)
    • Time, Clocks, and the Ordering of Events in a Distributed System (1978)
    • Dapper, a Large-Scale Distributed Systems Tracing Infrastructure (2010)
    • Gorilla: A Fast, Scalable, In-Memory Time Series Database (2015)
  • Release It 笔记
    • Anti-patterns & Patterns in Microservice Architecture
  • Database Design
    • Log Structured Merge (LSM) Tree & Usages in KV Stores
    • Prometheus
Powered by GitBook
On this page
  • Interface (API/ADT) vs. Data structure
  • Sequence Interface
  • Static Sequence Interface
  • Dynamic Sequence Interface
  • Set Interface
  • Static Set Interface
  • Dynamic Set Interface
  • Ordered Set Interface
  • Dynamic Ordered Set Interface
  1. MIT - 6.006

Sequence and Set Interface

Interface (API/ADT) vs. Data structure

二者的主要区别如下:

Interface (API/ADT)

Data Structure

规范 (Specification)

表现形式 (Representation)

需要维护什么数据

如何维护数据

指定支持的操作及其语义

实现所支持操作的算法

提出问题

解决方案

Sequence Interface

Static Sequence Interface

维护一个数据序列(sequence), x0,x1,x2,...,xn−1x_0, x_1, x_2, ..., x_{n-1}x0​,x1​,x2​,...,xn−1​ ,同时支持以下操作:

  • len():返回数据序列的长度 n

  • seq-iter():遍历 x0,x1,x2,...,xn−1x_0, x_1, x_2, ..., x_{n-1}x0​,x1​,x2​,...,xn−1​

  • at(i):返回序号为 i 的数据 xix_ixi​

    • left() => at(0)

    • right() => at(n-1)

  • set-at(i, x):将序号为 i 的元素替换为 x

我们有哪些数据结构可以实现 static sequence interface?如静态数组 A[0...n]

Dynamic Sequence Interface

维护一个数据序列, x0,x1,x2,...,xn−1x_0, x_1, x_2, ..., x_{n-1}x0​,x1​,x2​,...,xn−1​ ,除了支持 Static Sequence Interface 之外,还支持以下操作:

  • insert-at(i, x):将 x 插入到序号为 i 的位置上,同时将所有原来序号 ≥ i 的元素向右移动一个位置

  • delete-at(i): 将所有序号 ≥ i+1 的元素向左移动一个位置

  • set-at(i, x):语义上等同于连续执行 delete-at(i) 和 insert-at(i, x)

特殊案例:

  • Stack

    • right() - top

    • insert/delete-right() - push/pop

  • queue

    • insert-right() - enqueue

    • delete-left() - dequeue

  • deque

    • insert/delete left/right

Set Interface

Static Set Interface

维护一个键值对集合,支持以下操作:

  • find-key(k):如果可以,找到对应 k 的值

  • iter():按任意顺序遍历所有键值对/键/值

Dynamic Set Interface

维护一个键值对集合,在支持 static set interface 所有操作的基础上,支持以下操作:

  • insert(k, x):将键值对 k, v 存入键值对中,若键已存在,则覆盖值

  • delete-key(k):将键为 k 的键值对从集合中删除

Ordered Set Interface

维护一个键值对集合,所有键按顺序排列。在支持 static set interface 所有操作的基础上,支持以下操作:

  • find-next(k):找到键大于 k 的最小键对应的值

  • find-prev(k):找到键小于 k 的最大键对应的值

  • find-min():找到最小键对应的值

  • find-max():找到最大键对应的值

  • order-iter():按键的顺序依次遍历所有键值对/键/值

Dynamic Ordered Set Interface

在 Ordered Set Interface 的基础上,支持以下操作:

  • delete-min():删除最小键对应的键值对

  • delete-max():删除最大键对应的键值对

Priority Queue Interface

priority queue 是 dynamic ordered set 的一个特殊例子,支持:

  • insert(x)

  • find/delete-min() 或者 find/delete-max()

PreviousTopic: Ensuring Data Reaches DiskNextData Structure for Dynamic Sequence Interface

Last updated 6 years ago