【问题标题】:Algorithm for impelemnting a survey-like program实现类似调查程序的算法
【发布时间】:2013-04-18 11:08:27
【问题描述】:

我希望用 Java 创建一个程序,它会询问用户一些问题并报告一些结果。这很像一个调查。为了更好地解释问题,请考虑以下示例: 假设目前有 4 个问题可用,例如 Qa、Qb、Qc 和 Qd。每个问题都有许多可能的选项:

=> 问题 A 有 4 个可能的选项 a1、a2、a3 和 a4。

=> 问题 B 有 3 个可能的选项 b1、b2 和 b3

=> 问题 C 有 5 个可能的选项 c1、c2、c3、c4 和 c5

=> 问题 D 有 2 个可能的选项 d1 和 d2

此外,还有一些可用的结果将根据用户对上述问题的回答进行报告。假设有 5 个这样的结果,分别称为 R1、R2、R3、R4 和 R5。每个结果都有许多特征。这些特性确实是对上述问题的回答。更准确地说:

=> R1的特征是{Qa = a4, Qb = b2, Qc = c2, Qd = d1} 这表示 R1 通过 a1 选项与 Qa 相关联,通过 b2 选项与 Qb 相关联,依此类推

=> R2: {Qa = a3, Qb = b3, Qc = c3, Qd = d2}

=> R3: {Qa = a4, Qb = b1, Qc = c1, Qd = d2}

=> R4: {Qa = a2, Qb = b2, Qc = c5, Qd = d1}

=> R5: {Qa = a1, Qb = b3, Qc = c4, Qd = d2}

假设用户 U 提供了以下问题的答案 {Qa = a4, Qb = b1, Qc = c1, Qd = d1}

该程序的目的是报告更接近用户答案的​​结果以及接近程度的百分比。例如,由于没有任何结果与 100% 匹配,因此用户回答程序应报告与尽可能多的答案匹配的结果(高于某个阈值,例如 50%)。在这种特定情况下,程序应报告以下结果:

=> R3 为 75%(因为 4 个问题有 3 个匹配项)

=> R1 有 50%(因为 4 个问题有 2 个匹配项)

请注意,R4 有一个匹配项(所以 25%),而 R2 和 R5 根本没有匹配项(所以 0%)。 实施上述程序的主要问题是有很多问题(大约 30 个),每个问题都有多个答案(每个问题 3-4 个答案)。我不知道可以检索更接近用户答案的​​结果的有效算法。请注意,这些结果的存储方式根本不重要。您可以假设结果存储在关系数据库中,并使用 SQL 查询来检索它们。

我能想到的唯一解决方案是进行详尽的搜索,但这根本没有效率。换句话说,我正在考虑做以下事情:

=> 首先尝试检索与用户答案完全匹配的结果: {Qa = a4, Qb = b1, Qc = c1, Qd = d1}

=> 如果不存在结果,则更改问题的选项(例如 Qa)并重试。例如尝试: {Qa = a1, Qb = b1, Qc = c1, Qd = d1}

=> 如果仍然没有,请尝试其他可能的 Qa 选项,例如 a2、a3

=> 如果仍然没有,则给 Qa 初始用户答案(即 a4),然后转到 Qb 做类似的事情。例如尝试类似:{Qa = a4, Qb = b2, Qc = c1, Qd = d1}

=> 如果在对所有问题一一尝试所有可能选项后有任何结果,请尝试更改问题组合的选项。例如尝试同时更改两个问题的选项(例如 Qa 和 Qb):{Qa = a1, Qb = b2, Qc = c1, Qd = d1}

=>然后尝试三个问题的组合等等......

显然,上述算法在处理大量问题时会非常缓慢。有没有比上述算法更有效的已知算法或启发式算法?

提前致谢

【问题讨论】:

    标签: algorithm pattern-matching survey


    【解决方案1】:

    “仅”30 个问题?
    那么下面的“愚蠢”算法可能会比任何高度“智能”和复杂的算法更快。

    iterate over characteristics
        score = 0
        iterate over questions
            if questions's answer is right in current characteristic
                score++
    

    然后添加一个变量来跟踪最大值和匹配特征,然后你就设置好了。

    运行时间是size of characteristics * size of questions,而您所描述的算法可能具有指数运行时间,除此之外,编程和执行都更加复杂(由于分支预测错误的影响)

    【讨论】:

    • 这个想法确实很棒。我从另一个角度思考问题,看不到那个简单的解决方案。谢谢米施!
    猜你喜欢
    • 2010-09-09
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多