[关闭]
@ruanxingzhi 2020-03-04T15:25:08.000000Z 字数 573 阅读 749

你在开发一个庞大的工程,其中需要写一个拥有大量分支的函数。例如:

  1. int calc(int x)
  2. {
  3. int ans;
  4. if(x<=2)
  5. {
  6. if(x <= 1) ans = work1();
  7. else ans = work2();
  8. }
  9. else
  10. {
  11. if(x <= 3) ans = work3();
  12. else ans = work4();
  13. }
  14. return ans;
  15. }

已知的取值只可能是[1,2,3,4]。显然,您的程序面对每一种,都需要判断两次。

但是,昨天这个函数总共被调用100次,其中90次都是的情况,其余有8次,1次,1次。为了让判断次数最少,你的最优的代码应该如下:

  1. int calc(int x)
  2. {
  3. int ans;
  4. if(x<=1)
  5. ans = work1();
  6. else
  7. {
  8. if(x <= 2) ans = work2();
  9. else
  10. {
  11. if(x<=3) ans = work3();
  12. else ans = work4();
  13. }
  14. }
  15. return ans;
  16. }

在上述的代码中,的情况只需要一次判断;需要两次判断;需要3次判断。付出的总判断次数是次,不难证明,这是最低的判断次数。

现在,把这个问题抽象一下:

问付出的最低判断次数。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注