首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在层次结构中定位数据项位置?

如何在层次结构中定位数据项位置?
EN

Stack Overflow用户
提问于 2013-01-22 07:35:06
回答 1查看 213关注 0票数 5

我需要开发一种算法来定位数据项在某些层次中的位置。我有分类某些数据集元素的层次结构。层次结构是分类学的-顶层元素是最一般的类,它与数据集的任何元素相匹配,更深层次的元素包含更多匹配数据集某些子集的特定类。

例如,考虑游艇的等级。我们在顶层有游艇班。在下一个层次上,我们有帆船和汽车游艇。帆船有两个孩子--巡航游艇和赛车游艇。巡洋舰可以进一步分为制造商,例如巴伐利亚游艇和杜福游艇。然后,每一个类别可以进一步划分为船体类型,长度,帆面积等。

这是dataset中的一个示例:

代码语言:javascript
复制
Drive   Class   Manufacturer   Hull type Len  Sails Area ... Model
Sailing Cruiser Bavaria Yachts Mono-hull 25ft 560sqft    ... Bavaria 32
Sailing Cruiser Dufour Yachts  Mono-hull 27ft 580sqft    ... Dufour 32 Classic

我可以很容易地映射每个样本到层次结构,通过搜索它的深度-第一顺序。

乍一看,这是一个简单的搜索问题,但也存在一些困难。

第一个困难:数据项不一定包含所有元素。数据项缺少10 %到50 %的元素是很常见的。其中许多元素并不是很重要,例如游艇驱动器只能是马达或帆,所以它不会带来很多信息(只有1位)。这些元素可以很容易地使用更重要的元素来推断,例如,如果我们知道帆船模型,我们就可以推断出数据项的所有其他元素(或字段)。

第二个困难:某些元素在不同的数据项之间可能有所不同,即使它们对应于层次结构中相同的位置(相同的游艇模型)。例如,帆的面积可能会有很大的变化,因为船主以不同的方式修改他们的游艇平台,或者仅仅是圆面积的价值。

正如我已经提到的,我需要从层次结构中的数据集中定位不同的数据项。每个数据项可以以不同的精度定位。精度是搜索过程停止的层次结构中的深度。换句话说,我需要在对应于每个数据项的层次结构中获取路径,并且这个路径可能是不完整的。例如,算法可以发现数据项对应于Juliet 23游艇,但生产年份仍然未知。

如果我能用概率测度得到多条路径,那就太酷了。例如,算法可以在不同的生产年份返回Juliet 23的4条路径,每条路径的概率为25%。

此时,我使用深度优先搜索和一些启发式方法来解决这个问题。它给出了良好的结果,但我认为有可能得到更好的结果。也许你可以用更通用的方式来表达这个问题,这样我就能找到一些关于它的学术论文。

EN

回答 1

Stack Overflow用户

发布于 2013-03-23 15:51:09

我认为SQL确实可以帮助您解决困难,

用于您的第一个困难:使用NVL(字段,值如果为空)

例如:船型和生产年份(如果有的话),赛艇。

代码语言:javascript
复制
SELECT Y.TYPE, NVL(Y.PRDYEAR, 'UNKNOWN')
FROM T_YACHT Y WHERE Y.CLASS = 'RACING'

获得所有生产年份超过2000年的游艇。

代码语言:javascript
复制
SELECT * FROM T_YACHT Y WHERE
NVL(Y.PRDYEAR,TO_TIMESTAMP('01-01-0001','DD-MM-YYYY'))
    > TO_TIMESTAMP('01-01-2000','DD-MM-YYYY')

用于您的第二个困难:通过级联使用组-SQL\DISTINCT\NVL

看看有多少种赛艇。

代码语言:javascript
复制
SELECT Y.TYPE, COUNT(Y.ID) AS YACHT_TYPE
FROM T_YACHT Y
WHERE Y.CLASS = 'RACING'
GROUP BY Y.TYPE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14453659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档