是否有一种算法可以找到与某些属性相匹配的项目,比如20个问题的游戏?

lal*_*ala 5 search binary-tree artificial-intelligence

约20题游戏的一个问题是问在这里:

但是,如果我正确地理解它,答案似乎就是假设每个问题都会从一个分层树上下来.如果游戏是这样的话,二叉树应该可以工作:

  1. 它是动物吗?是.
  2. 它是哺乳动物吗?是.
  3. 它是猫吗?是.

因为猫是哺乳动物的一个例子,哺乳动物是动物的一个例子.但如果问题是这样的呢?

  1. 它是哺乳动物吗?是.
  2. 它是捕食者吗?是.
  3. 它有长鼻子吗?没有.

你不能用这些问题分枝树,因为有很多掠食者不是哺乳动物.因此,你不能将你的程序缩小到哺乳动物的范围,让捕食者成为哺乳动物的一个子集.

那么有没有办法使用我不理解的二进制搜索树,或者是否存在针对此问题的不同算法?

只是为了澄清,我只使用了20个问题作为例子,所以我的问题一般是关于这种搜索问题,而不是20问题游戏中特别涉及的其他问题.

tza*_*man 2

它类似于二分搜索,因为每个问题都是是/否,因此每个答案都会将剩余的集合分为两部分。但是,数据集可能不会存储在实际的二叉树中,因为正如您所意识到的,只有当问题始终按照与树分割维度相同的顺序提出时,这才有效。

此外,您可以轻松地拥有超过 20 个维度(“属性”)来分割事物,并且这 20 个维度中的某些集合可以由多个对象共享(因此 20 层二叉树的叶节点不会)不一定只包含一项)。

因此,“二分搜索”只是实际情况的一个隐喻,在每一步中,您都尝试选择最能将剩余集合分成两半的属性。就实际的数据结构而言,您必须使用其他东西。