决策,是世界上最重要的事情。
走路分两步:看准方向,大步前进。看准方向的过程就是决策。
任何一个问题,都对应两个空间:解空间和决策空间。我们所要做的就是使用决策空间去划分解空间。
决策可以分成两类:单步决策和多步决策。单步决策只需要做一次决策即可,多步决策需要做多次决策,需要考虑决策之间的连贯性。
对于一些有步骤的连续决策问题,决策可以用树形结构来描述。每次执行决策之后,不同的分支会采取不同的后继决策,这称之为动态决策。特殊地,有一类决策是链状结构,不需要根据实际情况做出调整,这称之为静态决策。动态决策形成决策树,静态决策形成决策链,链表是特殊的树,静态决策是特殊地动态决策。因为静态决策形成的是决策链,所以静态决策满足无序性,先执行哪步决策都可以。

编程有三种结构:顺序、循环、条件。动态决策就是有条件语句,静态决策就是没有条件语句。

言归正传,请看问题。
给定N个100bit的二进制数字,至少需要多少位才能判别它们?(静态决策)

这个问题直观看上去像贪心。在100个bit中,每次选择区分度最大的bit添加到决策链中。

首先选择b1,N个数字分成了两叉;然后选择b2,分成四叉。那么如何选择b1、b2呢?

N个100bit的二进制数字,构成了N行100列的矩阵。

假设第一次我选择b1之后,把全部数字分成两组,每组的个数分别为c1、c2。那么c1和c2越均衡越好。怎么算是均衡?$\frac{c_1}{N}\times c_1+\frac{c_2}{N}\times c_2$越小越好。这个式子表示随机选择一个数字x,与x相同的数字的个数。与x相同的个数当然是越少越好,这表示我们的程序已经能够把数字区分开了。

假设第二次我选择b2之后,把全部数字分成四组,每组的个数分别为c1、c2、c3、c4,这四个数字平方之和越小越好。

上述解法只是一种贪心,不知道贪心的结果是否正确。不知道是否有完美的方法。

转载于:https://www.cnblogs.com/weiyinfu/p/9333708.html

给你出道题---N个数字的静态决策区分问题相关推荐

  1. 找出字符串中所有数字

    刚才网友在SKYPE问Insus.NET一个问题,在MS SQL中,怎样找出一个字符串所有数字. Insus.NET使用较简单与平常的方法,就是使用循环的方法,循环字符串中每一个字符,并插入至一个表变 ...

  2. 找出重复的那个数字的异或算法

    假如你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000之间(包括1000).此外,除了一个数字出现两次外,其他的数字只出现了一次.假设你对数组做一次处理,用 ...

  3. Java第三大的数,Java通过排序找出数组第三大数字

    Java通过排序找出数组第三大数字 1 方式一:对数组进行排序并返回第三大数字 通过对数组进行排序并返回第三大数字,我们可以找到java中的第三大数字.让我们看看完整的示例,以找到java数组中的第三 ...

  4. C语言使用1到9求出所有k个数字的所有组合的算法(附完整源码)

    C语言使用1到9求出所有k个数字的所有组合的算法 C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定义,实现,main函数测试) C语言使用1到9求出所有k个数字的所有组合的算法完整源码(定 ...

  5. java输入一行_用java编写从标准输入读入一行字符串,打印出其中所有的数字

    用java编写从标准输入读入一行字符串,打印出其中所有的数字 关注:211  答案:1  mip版 解决时间 2021-01-13 10:00 提问者童話被染上了傷 2021-01-12 17:23 ...

  6. 给定3个数字,求出这3个数字中的最大数,并输出最大数

    给定3个数字,求出这3个数字中的最大数,并输出最大数 代码如下: import java.util.Scanner;/*给定3个数字,求出这3个数字中的最大数,并输出最大数 */ public cla ...

  7. 给定3个数字,求出这3个数字中的最大值,并将最大值输出

    给定3个数字,求出这3个数字中的最大值,并将最大值输出. public class T3 {public static void main(String[] args) {int a,b,c,max; ...

  8. 输入一个三位数,分别求出x的个位数字,十位数字,百位数字的值。

    #include<stdio.h>int main(void){ int x;scanf("%d",&x);printf("%d %d %d\n&qu ...

  9. 习题 3.12 给出一个不多于5位的正整数,要求:1. 求出它是几位数;2. 分别打印出每一位数字;3. 按逆序打印出各位数字,例如原数位321,应输出123。

    C++程序设计(第三版) 谭浩强 习题3.12 个人设计 习题 3.12 给出一个不多于5位的正整数,要求:1. 求出它是几位数:2. 分别打印出每一位数字:3. 按逆序打印出各位数字,例如原数位32 ...

最新文章

  1. web 表单,脚本验证
  2. SQL Server 2017 新功能分享
  3. android 动态更改包名,Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)...
  4. emacs文件/目录比较工具
  5. caffe目录结构 及 caffe源码文件说明
  6. [转]哈希算法(Hash Algorithm)初探
  7. sqlmap使用教程
  8. Visual Studio Code 运行html文件右键Open In Other Browsers提示找不到Chrome的解决办法
  9. 【系统】VMware虚拟机安装黑苹果系统macOS 12.5详细步骤
  10. matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...
  11. linux 创建mbr分区,MBR分区类型简介
  12. Stardock Fences v3.1.0.5 桌面整理、图标分类工具
  13. DC中保存ddc格式文件(亲测有效!)save the unmapped design in ddc format
  14. 串口的原始模式和标准模式
  15. 2055013-55-1,Ald-Ph-PEG6-acid在EDC或HATU等活化剂存在下,末端羧酸可与伯胺偶联形成稳定的酰胺键
  16. 自己做饭吃,怎样从极耗时的买菜、择菜、洗菜、切菜、配菜中解脱出来?
  17. python随机密码生成在26个字母中随机生成10个_习题6:二.3 随机密码生成
  18. 男士必须收藏:男士健身方案
  19. 你可以把Linux内核当成一家软件外包公司的老板
  20. 酷派t2co1怎么升Android5,而且双清不了怎么办Coolpad725?酷 – 手机爱问

热门文章

  1. Eclipse自动部署项目到Tomcat的webapps下的有效方法
  2. javascript forEach方法
  3. 2.python中的矩阵、多维数组----numpy
  4. keilc error C183: unmodifiable lvalue (编程时要注意啦)
  5. javaScript 计算两个日期的天数相差~~~
  6. wcf学习(一):预览
  7. 傳統經理人的迷思(转)
  8. 那年学过的Java笔记三核心类库三
  9. grpc java 泛型_关于使用GRPC遇到的BUG-Go语言中文社区
  10. java块语句_Java运算符、表达式、语句块