给你出道题---N个数字的静态决策区分问题
决策,是世界上最重要的事情。
走路分两步:看准方向,大步前进。看准方向的过程就是决策。
任何一个问题,都对应两个空间:解空间和决策空间。我们所要做的就是使用决策空间去划分解空间。
决策可以分成两类:单步决策和多步决策。单步决策只需要做一次决策即可,多步决策需要做多次决策,需要考虑决策之间的连贯性。
对于一些有步骤的连续决策问题,决策可以用树形结构来描述。每次执行决策之后,不同的分支会采取不同的后继决策,这称之为动态决策。特殊地,有一类决策是链状结构,不需要根据实际情况做出调整,这称之为静态决策。动态决策形成决策树,静态决策形成决策链,链表是特殊的树,静态决策是特殊地动态决策。因为静态决策形成的是决策链,所以静态决策满足无序性,先执行哪步决策都可以。
编程有三种结构:顺序、循环、条件。动态决策就是有条件语句,静态决策就是没有条件语句。
言归正传,请看问题。
给定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个数字的静态决策区分问题的更多相关文章
- 剑指Offer38 数组所有数字出现两次,只有两个出现了一次,找出这两个数字
/************************************************************************* > File Name: 38_Number ...
- 50.TO_NUMBER 将给出的字符转换为数字
.SYSDATE 用来得到系统的当前日期 SQL> select to_char(sysdate,dd-mm-yyyy day) from dual; TO_CHAR(SYSDATE, ---- ...
- 求出数组中所有数字的和&&弹出层效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。
返回本章节 返回作业目录 需求说明: 编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字. 实现思路: 定义方法findNums(),用于实现查找所有能够整除指定数 ...
- 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 ...
- [小米 Online Judge]找出单独出现的数字
描述: 给出N个数字.其中仅有一个数字出现过一次,其他数字均出现过两次,找出这个出现且只出现过一次的数字.要求时间和空间复杂度最小. 输入: 输入多个数字,每个数字以空格分开,回车结束 输出: 输出内 ...
- 给你出道题:依次去掉离中心最远的M个点
给定一个数组a[N],里面包含N个向量.现在要求进行删点操作,删点原则如下: 1.求出N个向量的中心O1,删除离O1最远的那个点 2.求出N-1个向量的中心O2,删除O2最远的那个点 ...... 重 ...
- SQL Server 2008 R2——创建函数 筛选出字符串中的数字 筛选出字符串中的非数字
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- 关于Edittext默认弹出软键盘为数字键
如果说我们只是输入数字的话,我们可以直接在xml文件中: android:inputType="number" 如果是身份证类型的话,我们可以这样: android:inputTy ...
随机推荐
- (转)C# SendMessage 参数与例子
原文:http://hi.baidu.com/ytmeng/blog/item/25f5de5157931a888c543001.html using System;using System.IO;u ...
- R 分组计算描述性统计量
统计学区内各个小区的房价均值 数据格式 id|community_name|house_area|house_structure|house_total|house_avg|agency_name|h ...
- __attribute__中constructor和destructor[总结]
1.前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数.于是从字面意思猜想,该函数会在 ...
- XE6入门(一)Hello World
XE6的IDE已经设计的非常棒了,是该放弃D7了,投入XE6的怀抱.. 本人用的XE6版本是 Embarcadero.Delphi.XE6.RTM.Inc.Update1.v20.0.16277.12 ...
- Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10
Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10 Updated by JR on Mar ...
- windows下根据进程ID强制杀死进程
[windows 进程ID PID]NTSD命令详解 1. ntsd -c q -p PID 2. ntsd -c q -pn ImageName 比如:ntsd -c q -pn qq.exe -c ...
- WIN10系统如何关闭用户账户控制
在底部搜索框中输入UAC,打开用户账户控制设置 更改为从不通知即可
- C#.NET常见问题(FAQ)-命名空间namespace如何理解
Namespace就是定义一个对象是哪个门派的,比如你现在就在A门派下,A门派的所有功夫(属性和方法)都可以不加声明直接调用.如果你要用B门派的功夫,就要先声明是B门派的XXX对象的XXX实例的XXX ...
- C#.NET常见问题(FAQ)-如何修改Form不能修改窗体大小
把FormBorderSytle改一下就可以了,改成FixedSingle或者Fixed3D都可以 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com ...
- iOS 动画效果。简单的提示消失
UILabel * label1 = [[UILabel alloc]initWithFrame:CGRectMake(, , , )]; label1.text = @"qingjoin& ...