Questions tagged «data-structures»

有关在软件应用程序中有效存储和表示数据的问题。


4
为什么数据类被认为是代码异味?
该文章称,数据类是一个“代码味道”。原因: 当新创建的类仅包含几个公共字段(甚至可能有少数getter / setter)时,这是很正常的事情。但是对象的真正威力在于它们可以包含行为类型或对其数据的操作。 为什么对象仅包含数据是错误的?如果该类的核心职责是代表数据,那么添加对数据进行操作的方法是否会违反“ 单一职责原则”?

9
多态性在现实世界中如何使用?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 我试图了解在现实生活中的项目中如何使用多态,但是我只能找到经典的示例(或类似的例子),该示例具有一个Animal带方法的父类speak(),以及许多重写此方法的子类,现在您可以speak()在任何子对象上调用该方法,例如: Animal animal; animal = dog; animal.speak(); animal = cat; animal.speak();

4
非功能语言中持久数据结构的使用
纯粹的功能或近乎纯功能的语言会从持久性数据结构中受益,因为它们是不可变的,并且非常适合无状态编程功能。 但是,我们不时看到用于Java等(基于状态的OOP)语言的持久数据结构库。人们经常听到有人主张使用持久性数据结构,因为它们是不可变的,因此是线程安全的。 但是,持久性数据结构是线程安全的,原因是,如果一个线程将一个元素“添加”到持久性集合中,则该操作将返回一个新集合,就像原始集合一样,但是添加了元素。因此,其他线程将看到原始集合。当然,这两个集合共享许多内部状态-这就是为什么这些持久性结构有效的原因。 但是,由于不同的线程看到的数据不同的状态,它似乎是持久数据结构是不是本身足以处理的情况,其中一个线程进行更改,对于其它线程是可见的。为此,似乎我们必须使用诸如原子,引用,软件事务性存储器乃至经典锁和同步机制之类的设备。 那么为什么PDS的不变性被吹捧为有利于“线程安全”的东西呢?在PDS协助同步或解决并发问题方面,有没有真实的例子?还是PDS只是一种为对象提供无状态接口以支持功能编程风格的方式?

9
用于访问计量单位的数据结构
TL; DR-我正在尝试设计一种最佳的数据结构,以定义度量单位内的单位。 A Unit of measure本质上是value与关联的(或数量)unit。 SI单位有七个基准或尺寸。即:长度,质量,时间,电流,温度,物质量(摩尔)和发光强度。 这足够简单,但是我们经常使用许多派生单位和费率。示例组合单位为牛顿:kg * m / s^2示例比率为tons / hr。 我们的应用程序严重依赖隐含单位。我们将把单元嵌入变量或列名中。但这在我们需要指定具有不同单位的度量单位时会产生问题。是的,我们可以在输入和显示时转换值,但这会生成很多开销代码,我们希望将其封装在自己的类中。 在Codeplex和其他协作环境上有许多解决方案。项目的许可是可以接受的,但是项目本身通常最终会变得太轻或太重。我们正在追逐自己的“正当”独角兽。 理想情况下,我可以使用以下方法定义新的度量单位: UOM myUom1 =新的UOM(10伏); UOM myUom2 =新的UOM(43.2,牛顿); 当然,我们会根据客户的需求混合使用英制和SI单位。 我们还需要使这种单位结构与将来的数据库表保持同步,以便我们也可以在数据中提供相同程度的一致性。 定义创建计量单位类别所需的单位,派生单位和费率的最佳方法是什么?我可以看到使用了一个或多个枚举,但这对于其他开发人员可能会感到沮丧。一个单一的枚举包含200多个条目,将是巨大的,而基于SI与英制单位的多个枚举可能会造成混淆,而基于单位本身的分类的其他细分可能会造成混淆。 枚举示例显示了我的一些担忧: myUnits.Volt myUnits.Newton myUnits.meter SIUnit.meter ImpUnit.foot DrvdUnit.Newton DrvdUnitSI.Newton DrvdUnitImp.FtLbs 我们正在使用的单位集非常明确,而且空间有限。当我们有客户需求时,我们确实需要能够扩展和添加新的派生单位或费率。尽管我认为更广泛的设计方面适用于多种语言,但是该项目使用C#。 我看过的一个库允许通过字符串自由输入单位。然后,他们的UOM类解析该字符串,并相应地添加内容。这种方法的挑战在于,它迫使开发人员思考并记住正确的字符串格式是什么。如果我们不在代码内添加其他检查以验证在构造函数中传递的字符串,则会冒运行时错误/异常的风险。 实质上,另一个库创建了太多开发人员必须使用的类。随着等效值单位它提供了一个DerivedUnit和RateUnit等。本质上,对于我们要解决的问题,代码过于复杂。该库实际上允许任何组合(在单位世界中是合法的),但是我们很高兴通过不允许所有可能的组合来扩大问题范围(简化代码)。 其他库非常简单,甚至都没有考虑过运算符重载。 另外,我也不担心尝试进行错误的转换(例如:伏特到米)。开发人员是目前唯一可以在此级别访问的人员,我们不一定需要防止这些类型的错误。


8
初学者常见的数据结构有麻烦吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我正在上第二门Java课程。我们正在进入数据结构。我已经在一个链表上做了一个分配,现在是一个堆栈。我在链接列表上遇到了麻烦。堆栈给我带来了一些麻烦,但要容易得多。 我应该担心使用这些算法和数据结构时遇到困难吗?我只是觉得我不太了解它。

11
在实际情况下,您使用的最复杂的数据结构是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 这个问题的根源来自我与业内其他开发人员的讨论。 事实证明,在很多地方,项目经理对复杂的数据结构保持警惕,并且通常坚持使用标准库/软件包中的现成的东西。一般的想法似乎是使用已经可用的东西的组合,除非严重阻碍性能。这有助于使代码库保持简单,对于非外交人员来说,这意味着“我们的人员流失率很高,而我们雇用的新员工可能并不那么好”。 因此,没有CS迷使用Bloom过滤器,跳过列表或展开树。因此,这又是一个问题:您在办公室使用或使用过的最复杂的数据结构是什么? 帮助您了解现实世界中软件的质量/复杂程度。

4
Bill Gosper说数据结构只是一种愚蠢的编程语言意味着什么?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 小拉尔夫·威廉·高斯珀(Ralph William Gosper)的话说: 数据结构只是一种愚蠢的编程语言。 他是什么意思?las,我在Google上能找到的就是对报价本身的无休止的复制/粘贴,没有任何上下文。

2
实际上,即使考虑了帐户缓存,Bloom过滤器真的比哈希更快吗?
当您考虑可以确定Int是否在恒定时间内具有99%的确定性的集合中时,Bloom过滤器看起来确实很棒。但是散列也是如此,唯一的区别在于,在散列中,大多数时候您只访问一次内存。使用Bloom过滤器时,您需要在完全遥远的地方每个请求访问它们约7次,因此每个请求将有多个缓存未命中。 我想念什么吗?

2
如何用JSON表示集合?
JSON支持以下数据结构(等同于Java):标量,数组/列表和映射。 一个Set不支持出的现成的JSON。 我考虑了几种用JSON表示集合的方法: [1]-作为列表 然而,名单都有自己的排序,所以下面的两个列表,["a", "b"]并且["b", "a"]是不相等的名单,但他们应该是平等的套。 [2]-作为地图 使用地图的键集,并忽略值。 但是再次,使用标准比较,两者与地图不同: {"a": "foo", "b": "bar"}, {"a": null, "b": null} [3]-作为地图,具有特殊价值 取一个标量,说0或说,null并使其成为地图中每个键的值: {"a": 0, "b": 0} 这样,即使更改了键顺序,在标准比较工具下,对象也是相等的。 但是,此技术会使用不相关的数据污染JSON文档。 [4]-作为有序列表 回到第一个建议,但是这次作为有序列表。这种解决比较问题。 但是,我们还应该记住排序的复杂性,并且映射符号可以处理重复项,而排序列表则不能。例: {"a": 400, "a": 9}被处理为{"a": 9},但["g", "g"]总是这样["g", "g"]。 说了这么多,在我看来,列表符号更清晰了,但是映射符号对键重复更健壮,并且很难使特殊值保持一致(尽管这null似乎是一个不错的选择)。 你怎么看?您将如何用JSON表示集合? 聚苯乙烯 请注意,这个问题仅与JSON有关。我知道可以使用其他格式,例如yaml。仍然...

2
随着固态硬盘的问世,B树和其他数据结构会过时吗?
如今,许多(也许是最多?)数据库应用程序都使用B树和变体来存储数据,因为这种数据结构优化了硬盘上的读取,写入和查找操作(这些操作反过来在硬盘的整体效率中起着重要的作用。数据库)。 但是,固态驱动器(SSD)是否应该完全取代传统硬盘(HDD),我们是否可以说B树和变体将变得过时,从而为在直接访问内存上更有效地运行的数据结构留出空间?如果是这样,这些结构将是什么?(例如,哈希表,AVL树)

3
可伸缩的布隆过滤器如何工作?
我正在阅读可伸缩的bloom过滤器,但无法理解每次组成的bloom过滤器是如何填充的,都添加了一个更大尺寸的新bloom过滤器。 不能查找最初创建的过滤器中有助于设置位的元素。我可能对此理解不正确? 我确实了解基本的布隆过滤器。但是,我无法绕过动态Bloom过滤器。

1
跳过列表如何工作?
对于家庭作业,我需要了解跳过列表的工作原理。 我已经编程了2年多了(我知道实际上并没有那么长),我什至从未听说过跳过列表。 我查看了所有可以找到的指南,但我仍然几乎不了解它们的工作原理。我什至在“代码审查”中搜索了一个示例实现,但只发现了一个审查。甚至还不是一个完整的实现。我查看了本课程提供的示例实现,这绝对是残酷的。在缺乏适当的方法和单字母变量名称之间,我不知道它是如何工作的。 跳过列表如何工作?要了解更高级的数据结构是否需要了解跳过列表?

5
在离散数据结构中存储文本中的元数据
我正在开发一个应用程序,它将需要存储inline,intext元数据。我的意思是这样:假设我们有一个长文本,并且我们想存储一些与特定单词或文本句子相关的元数据。 存储此信息的最佳方法是什么? 我的第一个想法是在文本中包含某种Markdown语法,然后在检索时将对其进行解析。看起来像这样: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[@note this sounds really funny latin] euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. 这会带来两个我想到的问题: 相对较小的是,如果所说的语法恰好在所说的文本上,它可能会使解析混乱。 最重要的是,这不会使此元数据与文本本身保持独立。 我想拥有一个离散的数据结构来保存这些数据,例如一个存储这些元数据的不同的DB表,这样我就可以以离散的方式使用它们:查询,统计信息,排序等等。 编辑:既然回答者删除了他的答案,我认为在这里添加他的建议可能是一件好事,因为这是在第一个概念上扩展的可行建议。海报建议使用类似的语法,但对元数据链接到PRIMARY KEY该的metadata数据库表。 看起来像这样的东西: Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam __nonummy nibh__[15432] euismod tincidunt …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.