【问题标题】:Unknown Data Structure?未知的数据结构?
【发布时间】:2023-04-09 13:55:01
【问题描述】:

我有一个问题,Java 是否有自己的数据结构来满足我的需求。 它类似于数组、链表和树的组合。

如果它不在 Java 中,但已经作为计算机科学/其他语言中的一个概念存在,这也是一个可以接受的答案,因此我可以对其进行更多研究并找出如何自己实现它。

这是一张图片,可以更好地说明我在寻找什么。原谅缺乏专业精神;我尽我所能:

我正在寻找以几个索引起始元素开始的东西,这些元素最终链接到其他元素并以各种收敛(一个最终元素)结束。最后,每个索引都有其对应的起始元素,并一直链接到最终收敛的元素。

应该是这样的,要求unknownStructure[i] 或其他东西应该获取一个对象,该对象代表第 ith 个起始元素,该元素一直链接到最终收敛的元素。 (这个要抓的东西在图中用各种鲜艳的颜色勾勒出来)。

【问题讨论】:

  • 这是一棵树,其所有叶节点引用都存储在关联的列表中。通过更新任何改变叶节点状态(重新平衡等)的 Tree 函数上的关联列表很容易创建。不幸的是,由于某种原因,Java 出了名的没有任何 Graph 集合。
  • 图像类似于artificial neural network (ANN) 的一部分。你会用这个做什么?
  • 我正在使用它来处理方程解析以进行错误传播计算。我不相信我在评论中有足够的空间来充分解释,但我需要逐步将一个方程分解成所有相互依赖的部分。你可以在这个非常简单的链接上阅读更多关于实验物理/化学概念的信息:lectureonline.cl.msu.edu/~mmp/labs/error/e2.htm

标签: java data-structures


【解决方案1】:

在我看来,您正在寻找有向图数据结构。
如果需要,您可能需要使用图表列表。

算法见page,实现见this

【讨论】:

  • 我认为这可以看作是一个有向图(尽管如果你足够努力的话,实际上任何东西都是一个图。)虽然有这么多的起始节点是不寻常的。
  • 我正在考虑一个有向图,并认为它确实适合该类别,但它似乎不够具体。但是,对于我的需求,实现似乎有点过于复杂和彻底。我想我会跳过额外的东西。研究按照 River 的建议使用节点。
  • 当链表只有节点时,图中有节点和年龄。一旦你完成了第一个实现,这些图表就没有那么复杂了。您可能会看到简短的videos,这将有助于理解理论及其实现。
  • @MaxZoom 边缘可能是 OP 甚至不需要的东西。如果他/她这样做了,您也可以很容易地在链接列表中实现它们。在我看来,对于简单的数据结构总是最好自己动手。
  • 河流是正确的。我完全不需要边缘。 River 建议使用节点并手动添加子关系。这实际上是完美的,因为这就是我需要做的所有事情(在将初始节点存储在数组中之后)。既然我可以用 Java API 类做我需要的一切,为什么还要结合别人的有向图实现呢?
【解决方案2】:

据我所知,没有“名称”,但链表节点数组可以很好地解决这个问题。

传统的链表是独立的,只是一行指向下一个的项目。但是,某些链表节点没有理由不能指向同一个子节点。毕竟,树和链表在 Java 中的创建方式基本相同。

唯一可预见的问题是,如果您想将这棵“树”遍历回数组中的起始节点。 (这仍然可以在多个家长的支持下实现。)

要实现您的链表数组,只需为链表创建一个Node 类,然后创建这些元素的数组:

Node[] myTreeArray = new Node[];

然后简单地用你的“基础”节点填充这个数组并将它们链接到它们适当的子节点(最终引导“结束”节点,它有一个子节点null

【讨论】:

  • 我认为这是解决这个问题最直观、最简单的方法。但是,我可以让两个不同的节点在 Java 中拥有相同的子节点吗?如果是这样,我认为这非常适合我的需求。
  • @Utagai 是的,你可以!只需让两者都指向同一个子节点! (事实上​​,您需要这样做才能使有向图也能正常工作。)
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多