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

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

言归正传,请看问题。
给定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,这四个数字平方之和越小越好。

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

给你出道题---N个数字的静态决策区分问题的更多相关文章

  1. 剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字

    /************************************************************************* > File Name: 38_Number ...

  2. 50.TO_NUMBER 将给出的字符转换为数字

    .SYSDATE 用来得到系统的当前日期 SQL> select to_char(sysdate,dd-mm-yyyy day) from dual; TO_CHAR(SYSDATE, ---- ...

  3. 求出数组中所有数字的和&&弹出层效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。

    返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数 ...

  5. 15. 3Sum_左右开工,遍历找出符合目标的数字

    题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find al ...

  6. [小米 Online Judge]找出单独出现的数字

    描述: 给出N个数字.其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字.要求时间和空间复杂度最小. 输入: 输入多个数字,每个数字以空格分开,回车结束 输出: 输出内 ...

  7. 给你出道题:依次去掉离中心最远的M个点

    给定一个数组a[N],里面包含N个向量.现在要求进行删点操作,删点原则如下: 1.求出N个向量的中心O1,删除离O1最远的那个点 2.求出N-1个向量的中心O2,删除O2最远的那个点 ...... 重 ...

  8. SQL Server 2008 R2——创建函数 筛选出字符串中的数字 筛选出字符串中的非数字

    =================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载  请通过右 ...

  9. 关于Edittext默认弹出软键盘为数字键

    如果说我们只是输入数字的话,我们可以直接在xml文件中: android:inputType="number" 如果是身份证类型的话,我们可以这样: android:inputTy ...

随机推荐

  1. 自定义View 水印布局 WaterMark 前景色 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. [asp.net]C#实现json的序列化和反序列化

    在做asp.net和unity进行http通信的时候,当unity客户端发出表单请求的时候,我要将他要请求的数据以json的格式返回给客户端,让客户端来解析.服务器端这一块就涉及到json的序列化和反 ...

  3. 对Kalman(卡尔曼)滤波器的理解@@zz

    1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他 ...

  4. SSE,MSE,RMSE,R-square指标讲解

    SSE(和方差.误差平方和):The sum of squares due to errorMSE(均方差.方差):Mean squared errorRMSE(均方根.标准差):Root mean ...

  5. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。

    Centos7出现异常:Failed to start LSB: Bring up/down networking. 按照<Kafka:ZK+Kafka+Spark Streaming集群环境搭 ...

  6. redis 基本性能测试说明

    http://ghoulich.xninja.org/2016/11/17/how-to-use-redis-benchmark-to-measure-performance/

  7. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  8. 【转】Java抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

  9. js未分类

    jQuery设置透明 1.直接.fadeIn 淡入 .fadeOut 淡出 .fadeTo(时间,"透明度") 2.addClass只能控制淡入和淡出,不能控制其速度. filte ...

  10. 关于testNG和JUnit的对比

    关于选择JUnit还是选testNG,这几篇文章,建议读一读: API参考文档: Junit API文档:http://junit.org/junit4/javadoc/latest/index.ht ...