正反馈算法

    技术2022-05-11  161

    正反馈算法

     

     

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

    具体的代码类似下面:

    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的实现。也就是说,各种情况之间是相互独立的,并且独立于整个算法框架。

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


    最新回复(0)