当前位置:  开发笔记 > 人工智能 > 正文

合并具有未知排序功能的数据

如何解决《合并具有未知排序功能的数据》经验,为你挑选了1个好方法。

我有很多字符串数组.根据相同的标准,每个数组中的字符串以相同的方式排序.但是,某些数组可能缺少某些字符串,并且可能没有包含完整字符串集的数组.此外,用于比较字符串的标准对我来说是不可用的:在数组的上下文之外,我无法分辨哪个字符串应该在另一个字符串之前.

我需要一种方法来生成一组完整的字符串,正确排序.或者当阵列没有足够的信息供我这样做时失败.

有人熟悉这种问题吗?什么是正确的算法?

例子:

A B D
A C D

无法正确排序,无法确定B和C的顺序

A B D
A B C
A C D

这有足够的信息来正确地订购ABCD.



1> FallenAvatar..:

我可以想到一种可能的方式,尽管可能不是最有效的方式:

我将用你的例子来解释:

A B D
A B C
A C D

创建一个唯一字符的数组,所以你会得到(例如):

A B D C

你也应该有一个枚举来描述可能的关系

enum Type
{
    Unknown = 0,
    Greater = 1,
    Equal = 2,
    Less = 3,
}

现在,创建一个方形矩阵,其尺寸与上面的数组相同,默认为Type.Unknown.

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

在计算排序时,您的数组将作为矩阵的索引.看看我的意思,看看这里:

  A B D C
A 0 0 0 0
B 0 0 0 0
D 0 0 0 0
C 0 0 0 0

通过并将对角线设为Type.Equal

2 0 0 0
0 2 0 0
0 0 2 0
0 0 0 2

现在你需要填充矩阵,遍历每个输入数组并获取每个字符和后面的字符.使用这两个字符,在矩阵中找到每个字符的索引(使用您的数组)并更新矩阵.

for(int i=0; i

每次在网格中分配2个位置,因为当一个char小于另一个char时,它还意味着第二个char大于第一个char.

现在你只需将chars一次插入一个数组(Linked List将是最简单的,你会在一秒钟内看到原因)

每次插入一个char时,都会从返回数组的开始处开始,遍历,查找第一个数组中的索引,并检查矩阵的Type.Greater或Type.Less(取决于哪种方式)你正在比较,curr char到数组,或数组到当前char)并插入它,如果你遇到的值不同于你的预期.

如果你在插入过程中遇到了matix中的Type.Unknown,你知道你没有足够的信息来排序这些数组,如果你点击Type.Equal,你可以忽略插入这个char(假设你不想重复)在你的结果中.)

然后你会输出你的返回数组

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有