正反馈算法

正反馈算法

 

 

我最近设计了一个这样的算法:有一个算法的总体框架,抽象了共同的部分;把各个差异的部分放在具体的类里面实现。具体的子类要实现好多的特殊情况,有的情况很罕见,有的情况很常见;但是为了正确,必须涵盖所有的情况。

具体的代码类似下面:

template<class ConcreteClass>

bool wholeAlgo(ConcreteClass& cc)

{

  init();

  while(cc.go()){

     cc.doAllCases();

     doSomething();

  }

  return cc.result();

}

 

 

class CClass1

{

public:

  bool go()

  {

     //return true;

  }

  void doAllCases()

  {

     switch(x)

     {

     case 0:

         doCase0();

         break;

     case 1:

         doCase1();

         break;

         // more case here

     default:

         break;

     }

  }

  bool result()

  {

     //return true;

  }

};

如果对这个算法进行测试,可能会有一些特殊的情况没有考虑到;但是可以修改CClass1doAllCases()来包含这种情况,但同时保证:对这种特殊情况的增加不会影响其他的情况的代码;对这种特殊情况的增加不会影响总体的算法框架wholeAlgo的实现。也就是说,各种情况之间是相互独立的,并且独立于整个算法框架。

符合这种特点的算法称之为正反馈算法。反之,如果对一种特殊情况的处理会影响其他情况的代码,或者影响算法的整体框架,那么这个算法就不是正反馈算法。

阅读更多

没有更多推荐了,返回首页