抽象数据类型和逻辑数据结构有什么区别?
What is the difference between Abstract Data Type and Logical Data Structure?
我很难区分抽象数据类型 (ADT) 和逻辑数据结构 (LDS)。我能想到的唯一区别是 ADT 定义了操作,而 LDS 更多的是关于数据的存储方式。但是 Stack 可以是 ADT,因为我们知道必须拒绝什么样的操作才能调用 'stack' 并且它也可以被称为 LDT,因为我们知道数据应该如何调用 'structured'它是 'stack'。 ADT 和 LDS 都是 'abstract',因为我们不讨论它们是如何实现的。
那么 ADT 和 LDS 是同一事物的不同名称是否正确,但是根据我们来自哪里,我们可以称其为 ADT 或 LDS?
抽象数据类型 (ADT) 是一种数学模型以及在该模型上执行的一些操作。例如,堆栈 ADT 由一系列整数(比方说)以及操作 push、pop、isempty、makeemptystack 和 top 组成。 ADT 类似于 Java 中的接口,并且是规范。数据结构是关于如何实现这些规范的。例如,堆栈ADT操作可以使用数组数据结构或使用链表数据结构来实现。队列 ADT 可以使用循环数组数据结构实现,所有 ADT 操作都可以在 O(1) 时间内完成。
在 real-world 问题中,您只会遇到构成您的 ADT 的可能操作的一个子集,您需要找到一个数据结构来有效地准确实现该操作子集。例如,在某些应用程序中,您想要维护一组整数,而您对这个集合所做的唯一操作就是找到集合中最小元素的值,删除集合中最小元素,并插入一个集合中的新元素。 (应用包括Dijkstra的最短路径算法、Prim的最小生成树算法和霍夫曼编码。)一个集合,用这三个操作MIN、EXTRACTMIN和INSERT,定义min-priority队列ADT。可以在 O(log n) 时间内高效实现所有这三个操作的数据结构是最小堆。其他数据结构——例如链表、未排序的数组、排序的数组——将花费 O(n) 的时间来执行这些操作中的一个或多个,因此对于这个特定的 ADT 来说效率较低。
我很难区分抽象数据类型 (ADT) 和逻辑数据结构 (LDS)。我能想到的唯一区别是 ADT 定义了操作,而 LDS 更多的是关于数据的存储方式。但是 Stack 可以是 ADT,因为我们知道必须拒绝什么样的操作才能调用 'stack' 并且它也可以被称为 LDT,因为我们知道数据应该如何调用 'structured'它是 'stack'。 ADT 和 LDS 都是 'abstract',因为我们不讨论它们是如何实现的。 那么 ADT 和 LDS 是同一事物的不同名称是否正确,但是根据我们来自哪里,我们可以称其为 ADT 或 LDS?
抽象数据类型 (ADT) 是一种数学模型以及在该模型上执行的一些操作。例如,堆栈 ADT 由一系列整数(比方说)以及操作 push、pop、isempty、makeemptystack 和 top 组成。 ADT 类似于 Java 中的接口,并且是规范。数据结构是关于如何实现这些规范的。例如,堆栈ADT操作可以使用数组数据结构或使用链表数据结构来实现。队列 ADT 可以使用循环数组数据结构实现,所有 ADT 操作都可以在 O(1) 时间内完成。
在 real-world 问题中,您只会遇到构成您的 ADT 的可能操作的一个子集,您需要找到一个数据结构来有效地准确实现该操作子集。例如,在某些应用程序中,您想要维护一组整数,而您对这个集合所做的唯一操作就是找到集合中最小元素的值,删除集合中最小元素,并插入一个集合中的新元素。 (应用包括Dijkstra的最短路径算法、Prim的最小生成树算法和霍夫曼编码。)一个集合,用这三个操作MIN、EXTRACTMIN和INSERT,定义min-priority队列ADT。可以在 O(log n) 时间内高效实现所有这三个操作的数据结构是最小堆。其他数据结构——例如链表、未排序的数组、排序的数组——将花费 O(n) 的时间来执行这些操作中的一个或多个,因此对于这个特定的 ADT 来说效率较低。