正反馈算法
我最近设计了一个这样的算法:有一个算法的总体框架,抽象了共同的部分;把各个差异的部分放在具体的类里面实现。具体的子类要实现好多的特殊情况,有的情况很罕见,有的情况很常见;但是为了正确,必须涵盖所有的情况。
具体的代码类似下面:
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;
}
};
如果对这个算法进行测试,可能会有一些特殊的情况没有考虑到;但是可以修改CClass1的doAllCases()来包含这种情况,但同时保证:对这种特殊情况的增加不会影响其他的情况的代码;对这种特殊情况的增加不会影响总体的算法框架wholeAlgo的实现。也就是说,各种情况之间是相互独立的,并且独立于整个算法框架。
符合这种特点的算法称之为正反馈算法。反之,如果对一种特殊情况的处理会影响其他情况的代码,或者影响算法的整体框架,那么这个算法就不是正反馈算法。
