Questions tagged «data-structures»

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

15
为什么数据结构在面试中如此重要?[关闭]
我必须承认,我大学毕业后在数据结构方面并不那么强。在我毕业期间的整个校园安置中,我目睹了诸如亚马逊,微软等大多数高科技公司主要专注于数据结构。似乎数据结构是他们唯一希望毕业生获得的东西。 老实说,我对此感到难过。我写好的代码。我遵循标准的编码设计模式,但确实使用数据结构,但使用的是表面结构,如ArrayList,LinkedList等Java公开的API。但是,公司通常专注于数据结构的复杂方面,例如基于指针的内存操作和时间复杂性。 当时可能是由于我的Java背景,我仅在以对象,实例等面向对象编程的方式进行交谈时才了解代码效率和逻辑,但我从未深入到位和字节级别。我不希望人们因为我在数据结构中的这种知识缺陷而对我视而不见。 那么,为什么所有这些都强调数据结构呢?

4
我应该“识别”并按名称知道哪些算法/数据结构?[关闭]
我想将自己视为一个经验丰富的程序员。我已经编程超过5年了。我的弱点是术语。我是自学成才的,因此尽管我知道如何编程,但我不了解计算机科学的一些更正式的方面。那么,按名称我可以识别和知道的实用算法/数据结构是什么? 请注意,我并不是在要求有关实现算法的书建议。我不在乎实现它们,我只是想知道什么时候算法/数据结构可以很好地解决问题。我要更多的是我应该“识别”的算法/数据结构的列表。例如,我知道解决此类问题的方法: 您管理一组标记为0-999的储物柜。人们来找您租用储物柜,然后回来找回储物柜钥匙。您将如何构建一个软件来管理哪些储物柜是免费的,哪些储物柜正在使用? 解决方案是队列或堆栈。 我正在寻找的是诸如“在什么情况下应使用B树-在此处应使用哪种搜索算法”之类的信息。也许还可以快速介绍一下如何使用更复杂(但常用的)数据结构/算法起作用。 我尝试查看Wikipedia的数据结构和算法列表,但我认为这有点过头了。因此,我正在寻找我应该认识的基本要素?


6
EAV-在所有情况下真的不好吗?
我正在考虑对其中一个项目中的某些内容使用实体属性值(EAV)模型,但是在Stack Overflow中有关它的所有问题最终都会导致将EAV称为反模式。 但是我想知道在所有情况下这是否是错误的。 假设商店产品实体具有共同的特征,例如名称,描述,图像和价格,它们在许多地方都参与了逻辑,并且具有(半)独特的特征,例如手表和沙滩球将通过完全不同的方面进行描述。因此,我认为EAV将适合存储那些(半)独特的功能。 所有这些假设是,为了显示产品列表,产品表中有足够的信息(这意味着不涉及EAV),并且仅在显示一个产品/比较最多5个产品/等时。使用通过EAV保存的数据。 我已经在Magento商业中看到了这种方法,并且这种方法非常流行,那么是否存在EAV合理的情况?

7
配置数据:单行表与名称-值对表
假设您编写了一个可由用户配置的应用程序。为了将该“配置数据”存储到数据库中,通常使用两种模式。 该单行表 CompanyName | StartFullScreen | RefreshSeconds | ... ---------------+-------------------+------------------+-------- ACME Inc. | true | 20 | ... 的名称-值对表 ConfigOption | Value -----------------+------------- CompanyName | ACME Inc. StartFullScreen | true (or 1, or Y, ...) RefreshSeconds | 20 ... | ... 我已经看到了两种选择,它们都有明显的优缺点,例如: 单行表限制了您可以拥有的配置选项的数量(因为通常限制一行中的列数)。每个其他配置选项都需要更改数据库架构。 在名称/值对表中,所有内容都是“字符串类型的”(您必须对Boolean / Date / etc。参数进行编码/解码)。 (还有很多) 开发社区内部对于哪种选择更可取达成共识?

11
如何在数据结构中表示魔方
如果我尝试模拟Rubik's Cube,您将如何创建一个数据结构以将多维数据集的状态存储在内存中,每边X个图块? 注意事项: 立方体可以是任何大小 它是魔方,因此可以旋转图层

16
我应如何在变量中存储“未知”和“缺失”值,同时仍保留“未知”和“缺失”之间的差异?
将此视为“学术”问题。我一直想知道不时避免使用NULL,这是我无法提出令人满意的解决方案的一个示例。 假设我将测量值​​存储在有时无法测量(或丢失)的地方。我想将“空”值存储在变量中,同时避免使用NULL。其他时候,该值可能是未知的。因此,有了特定时间范围内的测量值,有关该时间段内测量值的查询可能会返回3种响应: 当时的实际测量值(例如,包括在内的任何数值0) “缺失” /“空”值(即已完成测量,并且已知该点为空)。 未知值(即,此时未进行任何测量。它可以为空,但也可以为任何其他值)。 重要说明: 假设您有一个get_measurement()返回“空”,“未知”和类型为“整数”的值的函数。具有数值意味着可以对返回值执行某些运算(乘法,除法...),但是如果对这些运算符使用NULL,则如果不捕获它们,则会使应用程序崩溃。 我希望能够编写代码,例如避免使用NULL检查(伪代码): >>> value = get_measurement() # returns `2` >>> print(value * 2) 4 >>> value = get_measurement() # returns `Empty()` >>> print(value * 2) Empty() >>> value = get_measurement() # returns `Unknown()` >>> print(value * 2) Unknown() 请注意,所有print语句均未引起异常(因为未使用NULL)。因此,空值和未知值将根据需要传播,并且可以将值实际上是“未知”还是“空”的检查推迟到真正需要之前(例如在某个地方存储/序列化值)。 旁注:我想避免使用NULL的原因主要是脑筋急转弯。如果我想完成工作,我不反对使用NULL,但是我发现避免使用NULL可以使代码在某些情况下更加健壮。

4
为什么将MySQL用于字典网站是个坏主意?
我打算设计和建立一个数据库,以存储词典条目(通常是单个单词)及其在另一种语言中的含义。因此,例如,表Glossary必须具有条目和定义,并且每个表记录都具有对存储在其中的记录的ID的引用Tag(每个条目必须具有标签或类别)。 由于我的数据具有结构,因此我认为使用SQL数据库(如MySQL)并不是一个坏主意;但是人们说MongoDB的性能要好得多。 在客户端,应用程序必须能够提供一个具有自动完成功能的搜索框,该框使用后端提供的REST API。在这种情况下使用MySQL是否安全?还是应该为此使用MongoDB或任何其他解决方案的ElasticSearch?应该以这种方式存储和访问数十万条记录。

6
为什么许多在C中返回结构的函数实际上返回结构的指针?
return与在函数的语句中返回整个结构相比,返回指向结构的指针有什么好处? 我说的是像fopen其他底层函数一样的函数,但是可能还有一些高层函数也返回指向结构的指针。 我相信这更多是一种设计选择,而不仅仅是编程问题,而且我很想知道更多关于这两种方法的优缺点。 我认为返回指向结构的指针的一个好处的原因之一是能够通过返回NULL指针更容易地判断函数是否失败。 我想返回一个完整的结构NULL会比较困难,或者效率较低。这是正当的理由吗?

1
将一维数据结构视为2D网格
我正在使用将2D图像表示为1D数组的本机类。例如,如果要更改一个像素,则现在需要如何从x,y坐标中导出索引。 因此,假设我们有一个array1d像这样的一维数组: array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] 在我们的程序上下文中,array1d代表2D网格: a b c d e f g h i j k l m n o p q r …

4
如何精确创建抽象语法树?
我想我了解AST的目标,并且之前我已经构建了几个树结构,但从未构建过AST。由于节点是文本而不是数字,所以我很困惑,因此在解析某些代码时,我想不出一种输入令牌/字符串的好方法。 例如,当我查看AST的图表时,变量及其值是等号的叶节点。这对我来说很有意义,但是我将如何实施呢?我想我可以视情况而定,以便当我偶然遇到“ =”时,我将其用作节点,并将在“ =”之前解析的值添加为叶子。这似乎是错误的,因为根据语法的不同,我可能不得不为成千上万的东西辩护。 然后我遇到了另一个问题,那棵树是如何横穿的?我会一直下降到最低点吗,当我到达最低点时又返回一个节点,并对它的邻居也这样做吗? 我已经看到了大量关于AST的图表,但是我找不到一个简单的代码示例,这可能会有所帮助。


6
有必要遵循防御性编程实践以获取永远不会公开获得的代码?
我正在编写纸牌游戏的Java实现,因此我创建了一种特殊的Collection类型,称为“区域”。不支持Java的Collection的所有修改方法,但是Zone API中有一种方法,该方法move(Zone, Card)可将Card从给定的Zone移到其自身(由package-private技术实现)。这样,我可以确保没有任何卡被带出区域并消失。它们只能移到另一个区域。 我的问题是,这种防御性编码有必要吗?这是“正确的”,并且感觉像是正确的做法,但这并不意味着Zone API永远不会成为某些公共库的一部分。这只是给我的,所以这有点像是在保护我自己的代码,以免仅使用标准Collections可能会提高效率。 我应该把这个区域创意带到多远?谁能给我一些建议,让我考虑在我编写的类中保存合同,特别是对于那些不会真正公开可用的类,应该考虑些什么?

8
在OOP之前,数据结构成员是否公开?
使用OOP语言实现数据结构(例如,队列)时,数据结构的某些成员需要为私有的(例如,队列中的项目数)。 队列也可以使用struct和在上操作的一组函数以过程语言实现struct。但是,在过程语言中,您不能将成员struct设为私有成员。使用过程语言实现的数据结构的成员是否公开了,还是有一些技巧使其私有化?

8
如何为动态的,大小不受限制的“迷宫”构建数据结构?
我实际上不确定“迷宫”是否是正确的术语。基本上,用户从一个Room具有4个门(N,S,E和W)的单个门开始。它们可以向任何方向移动,每个后续房间都包含另一个房间,该房间的其他任何地方都具有1至4个门口。 “迷宫”的大小应该是无限的,并且随着房间的移动而增长。Rooms可用数量有限,但是可用数量是动态的并且可以更改。 我的问题是,我不确定这种模式的最佳数据结构 我最初想到的只是使用[X] [X] Room对象数组,但我真的宁愿避免这样做,因为该对象应该沿任何方向生长,并且只应构建“已访问”的房间。 另一个想法是让每个Room类包含RoomN,S,E和W的4个链接属性,并且仅链接到前一个Room,但是问题是我不知道如何识别用户是否进入了一个有一个相邻的房间已经“建造” 例如, ------------- | | | | 开始5 4 | | | | ---- ------------- --- --- | | | | | | | 1 2 3 | | | | | | --------------- 如果用户从“开始”>“ 1”>“ 2”>“ 3”>“ 4”>“ 5”移动,则Room#5需要知道W包含起始房间,S是房间#2,在这种情况下不可用,N可以是新的Room或一堵墙(一无所有)。 也许我需要混合使用阵列和链接的房间,或者也许我只是看错了方向。 是否有更好的方法为这种“迷宫”构建数据结构?还是我在目前的思维过程中步入正轨,而只是缺少一些信息? (如果您有兴趣,该项目是一个与Munchkin Quest非常相似的游戏)

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.