【发布时间】:2013-07-01 17:13:55
【问题描述】:
我有以下格式的启发式:
if a == 1 and b == 1 and c == 1:
do something
if a == 1 and b == 1 and c == 2:
do something
if a == 3 and b == 2 and c == 1:
do something
if a == 2 and b == 2 and c == 1:
do something
if a == 3 and b == 1 and c == 3:
do something
etc.
当然,这会产生许多不必要的比较,如果语句嵌套如下,则可以避免:
if a == 1:
if b == 1:
if c == 1:
do something
if c == 2:
do something
etc.
假设我有一个案例的元组(a, b, c) 的集合是有限的,并且每个元组都具有相同的被算法接收的可能性,我如何生成一个最优的决策树,即它使一般情况下的比较次数最少,还是在所有输入都经过它时最小化比较总数?
我想像这样:
In: optimal_tree([(1, 1, 1), (1, 1, 2)])
Out: "if a == 1:
if b == 1:
if c == 1:
do something
if c == 2:
do something"
In: optimal_tree([(1, 1), (2, 1), (2, 2)])
Out: "if a == 2:
if b == 1:
do something
if b == 2:
do something
if a == 1:
do something"
OR
"if b == 1:
if a == 1:
do something
if a == 2:
do something
if b == 2:
do something"
【问题讨论】:
-
这是一个理论练习,还是您实际上需要尽快处理传入的元组流?
-
后者,虽然我的问题很简单,只要将出现频率较高的值放在首位,我就可以让它接近最优。不过,我想知道如何解决这个问题。