Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我对抽象数据类型的理解正确吗?

我对抽象数据类型的理解正确吗?
EN

Software Engineering用户
提问于 2013-12-31 15:36:40
回答 5查看 2.3K关注 0票数 5

在阅读了许多不同站点的页面后,我得出结论,抽象数据类型有助于将数据结构的使用与其实现分离开来。通过使用已经可用的抽象,我们可以轻松地将数据映射到数据结构中。这种抽象称为ADT。请告诉我我是否正确地理解了这一点。另外,如果你能给出一个小的例子,这将是非常有用的。如果您希望在示例中给出任何代码,C或Python将对我有所帮助。

另外:它们是数据抽象的一个非常特殊的实现。与抽象的其他实例不同的是,ADT是理论结构。有助于在所需数据结构中映射或表示数据的理论结构。它们具有与它们相关联的属性或操作。这些操作可以应用于已映射到ADT的数据。数据是如何实际存储在ADT中的,或者操作是如何被隐藏的。

编辑:我以前说过,"ADT就像数据结构的蓝图“。有几个答案解释了为什么不是。我不清楚什么是“蓝图”,这就是使用“蓝图”这个词的原因。所以,我现在已经把它从原来的文本中删除了。

EN

回答 5

Software Engineering用户

发布于 2013-12-31 16:06:10

你正确地理解了这一点。ADT是可移植的理论结构,然后可以在大多数给定的编程语言中实现。

示例:堆栈

作为ADT的堆栈是一种类型的列表,它提供了对其数据成员的Last,First Out (LIFO)访问。因此,只能在堆栈的“顶部”点访问它。

在Python中,它看起来类似于:

代码语言:javascript
运行
AI代码解释
复制
class Stack:

    def __init__(self): # initializes the stack with an empty list to hold stuff
        self.list = []

    def push(n): # pushes item n onto the stack
        stack.list.append(n)

    def pop: # removes the "top" item from the stack
        del stack.list[-1]

    def peek: # looks at the top item of the stack
        view = stack.list[-1]
        return view

这应该是一种实现基本堆栈的方法。我还没有测试过这段代码,所以请自己承担风险。实际上,Python希望您在默认情况下将列表作为堆栈使用,因此教程文档将对其进行介绍。甚至有一个内置的“流行”方法。

通常,您会将堆栈实现为数组或链接列表。如果您想要更少的内存开销,并且通常更容易编写代码,这个数组就会很有用。然而,基于列表的堆栈可以更容易、更快地扩展。

票数 6
EN

Software Engineering用户

发布于 2014-01-01 02:47:37

这只是一个主题的要点,我强烈建议遵循这里的链接。

“抽象数据类型定义了一组抽象对象,这些抽象对象的特征完全取决于这些对象上可用的操作。这意味着可以通过定义该类型的字符操作来定义抽象数据类型。”Liskov :用抽象数据类型编程

考虑到上面非正式的定义,以下伪代码可以看作是ADT:

代码语言:javascript
运行
AI代码解释
复制
type stack;
stack stack_create();
void stack_push(stack, T);
T stack_pop(stack);

有一点是,对堆栈对象一无所知,只有可用的操作可以推断出什么--在上面的例子中,是stack_createstack_pushstack_pop。实现和结构细节的每一点都留给实现方。

现在,使用一个名为Stack的OO/python类,并使用pushpop方法。

代码语言:javascript
运行
AI代码解释
复制
class Stack:

    def __init__(self):
       ...
    def push(self, element):
       ...
    def pop(self):
       ...

如果它的客户端知道有一个名为Stack的类,并且他们可以访问它,那么查看它的一种方法是,对象的特点是它们是类Stack的实例,其结构包含pushpop字段--而不管它们是可调用的。客户端还知道,他们可以从Stack继承来创建其他东西,等等。

也就是说,更多的人知道/接触到客户。因此,这个Stack类型比前一个类型抽象得多(它公开为一个具有两个字段的具体结构,有一个类,您可以使用它进行继承,等等)。因此,可以说这种Stack类型不是符合给定定义的抽象数据类型。为了更严格,人们必须写这样的东西:

代码语言:javascript
运行
AI代码解释
复制
def create_stack():
   ...
def stack_push(stack, element):
   ...
def stack_pop(stack):
   ...

下面是它的一个可能的实现(在下面的例子中,如果您已经拥有上面的类,并且只想使它成为一个ADT,那么它只是一个包装器):

代码语言:javascript
运行
AI代码解释
复制
def create_stack():
   retur Stack()
def stack_push(stack, element):
   return stack.push(element)
def stack_pop(stack):
   return stack.pop()

现在,客户端只知道操作及其接口,并使用它们(并且只有它们)推断什么是“堆栈”类型。从外部看,不知道堆栈的实际实现和结构(除非它们通过检查create_stack结果的结构而违背抽象)。

类似地,在C中,您可以通过将这些函数声明放在.h头文件(使用作为堆栈类型的前向声明,或简单地使用void*),然后将结构定义和函数实现放在.c文件中来模拟。

关于类型系统的注意事项:当然,上述所有内容都不适用于具有静态类型检查和良好类型系统的语言-这类语言可能需要提供某些工具,以使合理的ADT成为可能。此外,在上面引用的文件中,“强”类型检查的方式似乎仅仅是作者偏好的问题;我没有看到它们被讨论或显示为ADTs的一个要求--文本在讨论类型检查时似乎非常谨慎,因为它们是相关的,但并不重要。另外,“ADT的C方法”的解释(见上文)是由撰写面向对象编程与抽象数据类型的研究人员William提出的。另一方面,编辑:库克写

“抽象数据类型依赖于静态类型系统来实施类型抽象。动态语言使用对象而不是用户-defined抽象数据类型并不是偶然。动态语言通常支持原语类型内置的抽象数据类型;此处的类型抽象由运行时系统强制执行。”

票数 6
EN

Software Engineering用户

发布于 2014-02-09 15:01:26

不幸的是,在抽象数据类型和对象方面存在许多混淆。

我认为OP使用的是“抽象数据类型”这一短语,好像它意味着“数据抽象”,或者只是定义抽象数据的一般意义。

抽象数据类型是数据抽象的一个非常具体的实现,最好在语言ML中实现。对象是另一种数据抽象形式。

你可以在我的报纸上读到更多这方面的内容:

http://www.cs.utexas.edu/~wcook/publications.htm#oo

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/222793

复制
相关文章
铣削加工精度的影响因素
一般来说,生产工件的机床都有坐标轴。如果机床坐标轴的精度不高,定位精度的偏差会使本机床生产的工件产生尺寸误差,从而产生大量的工件。符合质量要求,出现缺陷。机床的定位精度也影响主轴的振动频率。主轴振动频率越高,工件表面越粗糙。这样,工件不仅在规格上能满足规范要求,而且在外观光洁度上也不能满足外观要求。
lrglu
2022/06/30
6300
铣削加工精度的影响因素
LibSVM for Python 使用
LibSVM是开源的SVM实现,支持C, C++, Java,Python , R 和 Matlab 等, 这里选择使用Python版本。
py3study
2020/01/10
1.8K0
libsvm库的使用
看了下svm(支持向量机)的实现原理,感觉基础的部分还是不难懂的,但是如果要自己动手实现的话还是有很大难度的,况且自己写的效果肯定不太好。于是就在网上找了一个大牛写的svm库,实现了多种分类方式,而且涵盖了几乎所有常见语言的接口,用起来方便而且效果也很好。
mythsman
2022/11/14
6980
基于Libsvm的图像分类
关于Libsvm的废话 基于Libsvm的图像分类实例 说说图像分类的处理结果 1. 关于Libsvm的废话 先来一段废话,大家有心情看看就行,那就是关于支持向量机的问题,支持向量机是在统计学习理论基础上发展起来的一种机器学习方法。基于数据的机器学习是现代智能技术中的一个重要方面,研究的实质是根据给定的训练样本求对某系统输入输出之间依赖关系的估计,使它能对未知输入作出尽可能准确的预测和估计。本文提出了一种利用支持向量机(SupportvectorMachine,简称 SVM)的图像分类方法,关于其他支
小莹莹
2018/04/24
1.3K0
基于Libsvm的图像分类
C语言system参数字符串[通俗易懂]
首先我们可以知道system函数是这样的:system(const char*);(打开编辑器就能查到)
全栈程序员站长
2022/09/30
1.3K0
Python使用libsvm
whl文件下载(下载对应python版本的) https://www.lfd.uci.edu/~gohlke/pythonlibs/#libsvm
周小董
2019/03/25
3.4K0
Python使用libsvm
激活函数Relu对精度和损失的影响研究
通过实验发现,在未使用激活函数时,通过不断地训练模型,模型的准确率和损失率都时比较稳定地上升和下降,但是在上升和下降地过程中会出现抖动地情况,但是使用激活函数之后,模型的准确率和损失率就会上升和下降的非常平滑,更有利于实验的进行,以及对模型行为的预测。
算法与编程之美
2023/08/22
2400
激活函数Relu对精度和损失的影响研究
Python函数的参数(进阶) - 关于不可变和可变的参数会不会影响到函数外部的实参变量的问题
无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用。
python自学网
2022/06/08
1.8K0
Python函数的参数(进阶) -  关于不可变和可变的参数会不会影响到函数外部的实参变量的问题
SLAM 技术之对于扫描精度的影响及改进
移动扫描的优势在扫描领域是众所周知的。与传统的架站仪(TLS)相比,移动扫描设备可以更好的涵盖扫描范围以及加速工作流程,这也意味着可以减少服务供应商在现场的工作时间,并减低扫描成本。
小白学视觉
2022/04/06
4830
SLAM 技术之对于扫描精度的影响及改进
C语言(浮点精度)
关于C语言的浮点数精度问题,很多人存在误解,他们往往认为精度指的是float、double和long double三种数据类型,这是片面的。
用户2617681
2019/08/08
1.8K0
C语言(浮点精度)
Greenplum系统参数对性能的影响
数据库中表储存的模式对性能的影响 HEAP表 行存 不压缩 行存 AO表 (orientation=row) 可压缩 (appendonly=true) 列存 (compresstype=zlib,COMPRESSLEVEL=5) (orientation=column) 类型 创建说明 特点 堆表(heap) 默认或appendonly=false 表中数据不能压缩,堆表只能是行存表,适合数据经常更新,删除,的oltp类型的负载,通常表中的数据量不大,适合用作维度表 追加优化表 appendon
小徐
2021/04/22
1.5K0
Greenplum系统参数对性能的影响
MYSQL影响性能的主要参数
公共参数 max_connections = 151 #同时处理最大连接数,推荐设置最大连接数是上限连接数的80%左右 sort_buffer_size = 2M #查询排序时缓冲区大小,只对order by和group by起作用,可增大此值为16M query_cache_limit = 1M #查询缓存限制,只有1M以下查询结果才会被缓存,以免结果数据较大把缓存池覆盖 query_cache_size = 16M #查看缓冲区大小,用于缓存SELECT查询结果,下一次有同样SELECT查询将直接从缓存
dys
2018/04/02
1.1K0
libsvm的python接口在linu
1. 下载libsvm 2. 解压 3. cd 进入libsvm文件夹,然后make 4. cd 进入libsvm的python子文件夹 ,然后make 5.会生成文件libsvm.so.2,svm.py,svmutil.py $ sudo cp *.py /usr/lib/python2.7/dist-packages/   $ cd ..   $ sudo cp libsvm.so.2 /usr/lib/python2.7/ 6.检查  1.# cd /  2.# python  3.# import
py3study
2020/01/09
4450
C# 永远不会返回的方法真的不会返回
一般情况下,如果一个方法声明了返回值,但是实际上在编写代码的时候没有返回,那么这个时候会出现编译错误。
walterlv
2020/02/10
1K0
用libsvm进行回归预测
作者:kongmeng http://www.cnblogs.com/hdu-2010/p 最近因工作需要,学习了台湾大学林智仁(Lin Chih-Jen)教授 http://www.ie.ntu.edu.tw/professors/%E5%90%88%E8%81%98%E5%B0%88%E4%BB%BB%E5%B8%AB%E8%B3%87/cjlin/ 等人开发的SVM算法开源算法包。 为了以后方便查阅,特把环境配置及参数设置等方面的信息记录下来。 SVM属于十大挖掘算法之一,主要用于分类和回归。本文
机器学习AI算法工程
2018/03/14
2.5K0
用libsvm进行回归预测
切削热是怎样影响加工精度的?(精密加工必备知识)
数控编程、车铣复合、普车加工、行业前沿、机械视频,生产工艺、加工中心、模具、数控等前沿资讯在这里等你哦
lrglu
2023/09/04
5940
切削热是怎样影响加工精度的?(精密加工必备知识)
探索不同学习率对训练精度和Loss的影响
在探索mnist数据集过程中,学习率的不同,对我们的实验结果,各种参数数值的改变有何变化,有何不同。
算法与编程之美
2023/08/22
4190
探索不同学习率对训练精度和Loss的影响
Frontiers: QIIME参数对分析结果的影响
Quantitative Insights Into Microbial Ecology (QIIME)广泛应用于微生物群落的分析。本研究利用模拟群落(mock community)研究了QIIME默认参数对分析结果的影响。模拟群落包括8个原核生物和2个真核生物。采用两种混合方式:混10种生物的细胞或者混DNA。
Listenlii-生物信息知识分享
2020/05/29
6750
影响数据库性能与稳定性的几个重要参数
_optimizer_adaptive_cursor_sharing:自适应游标共享(简称ACS),一般还包括另外两个_optimizer_extended_cursor_sharing和_optimizer_extended_cursor_sharing_rel 参数)
老虎刘
2022/06/22
9870
JVM - 参数配置影响线程数
通常, -Xms 和 -Xmx 设置成一样的,避免每次垃圾回收完成后JVM重新分配内存。因为当Heap不够用时,发生内存抖动,影响程序运行稳定性。
用户2987604
2020/06/15
5.7K1
JVM - 参数配置影响线程数

相似问题

edismax解析器和默认mm

11

查询解析器- eDisMax -拆分和短语

01

使用eDisMax计算多个字段加权分数之和的最终分数

20

使用solr中的edismax查询解析器对不同字段进行不同的搜索

120

solr Edismax解析器qf参数行为奇怪吗?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档