设计自动完成系统以选择聚合类型的实例

时间:2009-07-17 12:00:47

标签: algorithm user-interface autocomplete

聚合类型T由4个字符串组成:t = c1 c2 c3 c4

c1 c2 c3 c4中的每一个都可以有许多唯一值:

  • c1可能有许多唯一值c1.1,c1.2,c1.3,... c1.n,其中'n'可能相当高,约为30,000。
  • c2具有少得多的唯一值,不超过5,即n <1。 5
  • 对于c3和c4,n是不可预测的,但通常为10

有许多类型为T的实例,大约200,000 - 都由不同的c1 c2 c3 c4值组成。

    t1 = c1.1 c2.1 c3.1 c4.1
    t2 = c1.2 c2.1 c3.2 c4.2
    t3 = c1.3 c2.2 c3.2 c4.3
    ...
    tN = c1.n c2.n c3.n c4.n

目标是允许用户选择类型T的单个有效实例。目前,(C#Winforms .NET 2.0)UI显示4个自动完成下拉列表,每个下拉列表中包含c1 c2 c3 c4的唯一值。一旦选择了单个有效实例,它就会作为输入提供给外部系统。当前用户界面的优势在于它可以快速推出(鉴于这是一个v1.0版本)并且速度相当快 - Winforms的标准自动完成下拉列表似乎没有30k独特项目的问题用户可以快速选择一组四个值。

问题在于,虽然它确实允许用户快速输入他们需要的内容,但自动完成功能无法帮助用户找到合适的用户不知道他们选择的值组合是否匹配现有的有效对象。对于有经验的用户来说,这主要不是探索;但是新用户最终选择了c1 c2 c3 c4的值,这些值实际上并不会产生类型为T的有效实例。

我的问题是:有没有其他方法可以构建一个用于输入T的UI,这样用户就可以获得自动完成的好处(我真的想避免选择列表式界面,它们输入数据的速度要慢得多)同时允许新用户选择有效的值组合?

虽然最初的实现是基于.NET的,但我很高兴听到任何其他平台的解决方案。我的问题是关于设计更高效的用户界面,而不是特定平台。

编辑澄清:算法(即非UI)建议也欢迎。

2 个答案:

答案 0 :(得分:1)

我的回答与如何实现GUI没有直接关系,但您可以将所有有效组合t1-> tN放在patricia trie中,并使用它来构建autocompletion as you type

答案 1 :(得分:0)

您当前界面的快速适应是将所有选择列表限制为仅允许的元素。 IE浏览器。一旦用户输入了一个项目,例如c1.1他应该只允许选择与c1.1一起出现的其他三个输入中的元素。

除此之外,我还会阻止用户只留下一半的字段,只有在用户成功完成输入时才更新依赖列表。您可以使用Combobox,文本框本身或texboxes与列表一起实现。当条目很少时,列表框或可能的组合框可以加快选择。

您似乎有一个算法可以确定哪些组合是允许的,上面提到的patrica trie也是可能的