【发布时间】:2016-02-23 21:02:42
【问题描述】:
我得到了一项作业,要求我编写(仅使用函数式范例)一个类似于 Akinator 的游戏,在该游戏中,计算机会问我一些关于我正在思考的人的问题,并且必须猜测它是谁。我有一个大约二十个人的数据库,每个人都有大约十个问题,他们要么回答"true"要么"false"。
我被要求构建最小(深度)决策树,定义为:
<Tree> ::= leaf(<List[Atom]>) %list of persons
| question(<Atom> true :<Tree> false :<Tree>)。
我建议用一个简单的算法来做,其中树的下一个节点代表真假数最接近的问题。我必须编写一个至少和这个算法一样有效的算法。所以我在网上查找了一个更好的算法,我发现了一些算法,比如 C4.5 和 ID3。
我的问题是我可以使用哪种算法比我为我的家庭作业提出的算法更好? (对于我的要求来说不是太复杂?)
【问题讨论】:
-
您已经提出了一个简单的解决方案:从上到下构建一个树,同时在每个节点询问熵最多(最消歧)的问题。所以 第一个 问题是最接近 50:50 拆分的问题。 然后,对于每个分支(每个问题下有两个,对或错)递归地重复该过程。
-
是的,抱歉我不清楚,我正在寻找更好的算法:)
-
您是否尝试过您找到的任何算法?
-
不,我还没试过