【发布时间】:2015-12-05 05:01:16
【问题描述】:
我正在尝试从SOLR 获得的方面为类别和子类别等构建层次结构树。输入格式为:
['445',
79,
'398',
73,
'710',
32,
'398|760',
28,
'398|760|779',
28,
'445|446',
10]
其中单引号中的数据代表类别,后面的数字代表频率。
给定上面的数组,我需要的输出格式应该是:
[
{
"id": 445,
"count": 79,
"children": [
{
"id": 446,
"count": 10
}
]
},
{
"id": 398,
"count": 73,
"children": [
{
"id": 760,
"count": 28,
"children": [
{
"id": 779,
"count": 28
}
]
}
]
},
{
"id": 710,
"count": 32
}
]
我正在尝试用相同的方式构建树 - 以获得有效的解决方案,但无法做到这一点。有人知道如何让它工作——或任何其他时间有效的解决方案。
谢谢!
【问题讨论】:
-
我对这里预期的 trie 目的感到相当困惑。通常,您会在 JavaScript 中创建一个 trie 用于自动完成目的,例如如果用户键入类别名称,显然您正在处理类别 id...您的目标是哪种类型的 trie 结构?给定
398|730|607,我可以为您设计一棵树,例如{398:{freq:73,760:{freq:28,779:{freq:28}},730:{freq:18,607:{freq:18}}}},这就是您想要的吗?还是您想要一个基于类别名称的树,例如:{'j':{'a':{'v':{'a':{...}}}}}? -
我已经编辑了问题以展示我正在努力的最终输出,我想使用 Trie 作为字典,然后使用 trie 构建最终的数据结构(基数树不是' t 仅用于自动完成)。但是,只要复杂性保持为 O(n),任何其他方法都可以工作。
-
为什么不拆分数据先得到树的顶点,然后得到边呢?还是总是这样:你得到第一个边,然后是顶点?
-
好吧,原始输入的来源超出了我的控制范围,所以我不能假设,但我当然可以修改它以获得你提到的格式 - 但我不明白这有什么帮助缓解复杂性。我已经通过在桶中递归地形成桶解决了这个问题——但正如在时间和空间方面的可怕权衡中所预料的那样!
标签: javascript arrays node.js trie