免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1911 | 回复: 10
打印 上一主题 下一主题

[算法] 苛刻的算法,只告诉你是否大于,让你求出具体值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-02 10:32 |只看该作者 |倒序浏览
我的代码
  1. void main()
  2. {
  3.         int s1=77;
  4.         int i=128;
  5.         int j=1;
  6.         while(1)
  7.         {
  8.                 if(s1>;i)
  9.                 {
  10.                         i=i+(64/j);
  11.                         if((64/j)==1)break;
  12.                 //        i=i+(64/j);
  13.                         j++;
  14.                 }
  15.                
  16.                 else
  17.                 {
  18.                         i=i-(64/j);
  19.                         if((64/j)==1)break;
  20.                 //        i=i-(64/j);
  21.                         j++;
  22.                 }
  23.         }

  24.                 cout<<i;
  25. }
复制代码


随便乱写的
目的:确定s1的大小,这里直接定义了,但是算的时候我就当未知数
先决条件是s1<=255&&s1>;=0,辅助条件是可以知道s1和某个数的大小关系,如何求出s1的准确值...

论坛徽章:
0
2 [报告]
发表于 2005-04-02 10:37 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

二分法

论坛徽章:
0
3 [报告]
发表于 2005-04-02 10:39 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

2分法的条件不够啊

能提示下关键代码吗

论坛徽章:
0
4 [报告]
发表于 2005-04-02 10:40 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

我的意思是,代码会不够精确而导致求出的是偏差了1或者2的值
我改不了了,正苦想ING

论坛徽章:
0
5 [报告]
发表于 2005-04-02 10:41 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

怎么不够?
如果比给定的数大,就把给定数乘2再比较。
如果比给定数小,就把给定数除2再比较。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-04-02 11:34 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

不是乘2除2吧?
是(min + max) / 2

论坛徽章:
0
7 [报告]
发表于 2005-04-02 12:17 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

一个典型的二分查找片断,初始化工作自己作吧!

  1. int binarysearch(char t)
  2. {
  3.     int low, up, m;
  4.     low = 0;
  5.     up = n-1;
  6.     while(low <= up){
  7.         m = (low + up)/2;
  8.         if(x[m] < t)
  9.             low = m + 1;
  10.         else if(x[m] == t)
  11.             return m;
  12.         else
  13.             up = m -1;
  14.     }
  15.     return -1;
  16. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2005-04-02 14:55 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

else if(x[m] == t)
这句代码,在这里被限制了,我说过先决条件是只能判断大小,不能判断是否相等,所以我写的代码不精确

论坛徽章:
0
9 [报告]
发表于 2005-04-02 19:08 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

原帖由 "kofj" 发表:

这句代码,在这里被限制了,我说过先决条件是只能判断大小,不能判断是否相等,所以我写的代码不精确


那就把算法代码换个位置,把恒等条件作为else进行处理不就可以了?

论坛徽章:
0
10 [报告]
发表于 2005-04-02 19:21 |只看该作者

苛刻的算法,只告诉你是否大于,让你求出具体值

我已经找到一个折中的办法
效率比一般的二分法慢一步
不过一步应该没什么大问题
完全根据>;是否成立来判断
恒等的话,又用到等号判断,所以不行的
  1. #include <stdlib.h>;
  2. #include <stdio.h>;
  3. #include <iostream.h>;

  4. void main()
  5. {
  6.         int s1=145;
  7.         int i=0;
  8.         int j=256;
  9.         int k;
  10.         int f;

  11.         while(1)
  12.         {
  13.                 f=j-i;
  14.                 k=(i+j)/2;
  15.                 if(s1>;k)
  16.                 {
  17.                         if(f<=1)break;
  18.                         i=k;
  19.                 }
  20.                
  21.                 else
  22.                 {
  23.                         if(f<=1)break;
  24.                         j=k;


  25.                 }
  26.         }

  27.                 cout<<j;
  28. }


  29. /*

  30.   34<(0+256)/2=128
  31.   34<(0+128)/2=64
  32.   34>;(0+64)/2=32
  33.   34<(0+256)/2












  34. */
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP