正反饋算法

正反饋算法

 

 

我最近設計了一個這樣的算法:有一個算法的總體框架,抽象了共同的部分;把各個差異的部分放在具體的類裏面實現。具體的子類要實現好多的特殊情況,有的情況很罕見,有的情況很常見;但是爲了正確,必須涵蓋所有的情況。

具體的代碼類似下面:

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的實現。也就是說,各種情況之間是相互獨立的,並且獨立於整個算法框架。

符合這種特點的算法稱之爲正反饋算法。反之,如果對一種特殊情況的處理會影響其他情況的代碼,或者影響算法的整體框架,那麼這個算法就不是正反饋算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章