【问题标题】:Generating hierarchy from flat data从平面数据生成层次结构
【发布时间】:2016-03-18 13:14:59
【问题描述】:

我需要从平面数据生成层次结构。这个问题不适用于家庭作业或面试测试,尽管我想这对任何一个都是一个很好的例子。我见过thisthisthis,没有一个完全符合我的情况。

我的数据如下。我有一个对象列表。每个对象都有一个面包屑和一个文本。示例如下:

Object 1:
---------
breadcrumb: [Person, Manager, Hourly, New]
text: hello world

Object 2:
---------
breadcrumb: [Person, Manager, Salary]
text: hello world again

我需要将其转换为层次结构:

Person
  |--Manager
       |--Hourly
            |--New
                 |--hello world
       |--Salary
             |--hello world again

我正在使用 Java 进行此操作,但任何语言都可以。

【问题讨论】:

  • @zEro:我被困在如何解决这个问题的概念上。我尝试创建一个具有List<Item> childrenItem parentItem 类。但这个概念是我卡住的地方。
  • @David:这看起来是一种合理的方法。能否提供您的代码?
  • @David 好。因此,正如您在问题中提到的那样-您正在寻找层次结构。类似树的数据结构可以很好地表示您正在寻找的内容。看看这是否适合你。

标签: java hierarchy hierarchical-data trie hierarchical


【解决方案1】:

您需要一个 Trie 数据结构,其中每个 Node 包含子项 List<Node>

  1. Trie 本身应该包含一个Node--root,最初为空;

  2. 当新序列到达时,迭代它的项,试图在当前Node 的现有子项中找到对应的值,如果找到对应的项则继续前进。这样你就可以找到存在于 trie 中的最长前缀,它是给定序列共有的;

  3. 如果最长公共前缀未覆盖整个序列,请使用剩余的项目构建一个节点链,其中每个节点只有一个子节点(下一个项目),并将其作为子节点附加到您停止的节点在第 (2) 步。

你看,这并不容易。实现代码会很长而且不明显。不幸的是,JDK 没有标准的 trie 实现,但您可以尝试找到一些现有的或编写自己的。

更多详情请见https://en.wikipedia.org/wiki/Trie#Algorithms

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多