Skip to content

Guide

通过wikipedia Search algorithm,我们可以看到:“search”是一个非常宏大的主题,有时候有这样的感觉:computer science解决很多问题的解法最终都可以归入search的范轴。

正因为search algorithm的无处不在,所以对它的研究是非常有必要的。

Search space

为了更好地描述、总结search algorithm,我们首先站在一个更高的层次,因此我们需要使用抽象而不是具体。我们首先明确search问题的object:search space。

Search space的分类

有着多种分类标准:

Classification criteria Examples
virtual 参见 维基百科 Search algorithm # For virtual search spaces 章节
physical/concrete - tree
- graph

按照“结构化思维”,可知:本质上都可以使用relation来进行描述,本质上都是discrete structure,因此可以使用相同的algorithm来解决它们的问题。

virtual search space和concrete search space遵循相同的relation,因此:

1、它们呈现相同的structure

2、可以使用相同的algorithm来实现它们的computation

由于人们的思维往往是易于接受具体,所以对于virtual space这种比较抽象的,我们往往使用具体事物来进行刻画,比如使用search tree来描述问题的解空间,因此,后面在描述各种search strategy的时候,我们是基于concrete structure来进行描述的,这样便于理解,所以讲这部分内容都放到了Relation-structure-computation\Structure章节中。

Search in virtual space

virtual space的搜索和concrete structure的搜索的过程、实现方式非常类似。

virtual space包括:

  • 解空间
  • 状态空间

以**结构化思维**来看,virtual space也有着**结构**,最最典型的例子是eight-queen puzzle,它可以使用**nesting关系**来解释:第一次包含n个选择,第二次包含n-1个选择,所以它最终呈现树形,所以可以使用**Relation-based algorithm model**。

参见:

  • 结构化思维:Relation-structure-computation\index.md
  • Relation-based algorithm model:Relation-structure-computation\Computation\Relation-based-algorithm-model.md
  • nesting关系:Relation-structure-computation\Model\Nesting-relation-model

Graph and tree search algorithms

这部分内容Relation-structure-computation\Structure\Data-structure\Graph\Search-algorithm章节进行了描述。

Search purpose

搜索目标,是在search space中搜索所有的solution,还是搜索best solution。

Search strategy

Relation-structure-computation\Structure\Data-structure\Graph\Search-algorithm\Methods中进行了描述。

Optimization algorithm and search algorithm

使用各种各样的Optimization algorithm来实现Optimization问题,其实其过程也可以看做是Search algorithm:search for best solution,即寻找最优解,这些算法往往采用的策略是:不断地向最优解逼近,关于这个观点,在Relation-structure-computation\Computation\index.md#Iterative method章节中也进行了描述。

比如Gradient descent就是一个典型的例子:该算法的过程可以看做是不断地向目标逼近的过程,下面是说明此观点的素材:

如何直观地解释 backpropagation 算法? - Anonymous的回答 - 知乎中有这样的说明:

梯度下降法需要给定一个初始点,并求出该点的梯度向量,然后以负梯度方向为搜索方向,以一定的步长进行搜索,从而确定下一个迭代点,再计算该新的梯度方向,如此重复直到cost收敛。