编程之美_2.4 “1的数目”
来源:互联网 发布:成都编程招聘 编辑:程序博客网 时间:2024/06/05 02:18
扩展问题:二进制数N,从1开始,到N的所有二进制数,然后数下其中出现的所有“1”的个数。例如:
f(1)=1
f(10)=2 (因为01,10共有2个1)
f(11)=100 (因为01,10,11共有4个1)
思路:以10110为例,考虑最高位为0时共有几个1,因为后面4位中1和0出现的概率是相等的,也即1在每个位上出现的概率为(2^4)/2=8,最高位为0时,所有1的个数为4*8=32,即f(1111)=32.现在只需计算最高位为1的情况。最高位上出现1的个数的有10000,10001,10010,10011,10100,10101,10110;10110-1111=10110-10000+1=111.最高位为1或不为1时所有1的个数都算完了即f(1111)+10110-10000+1;而后我们只需考虑10110中其他位为1的时候,可以用与最高位同样的处理方式,10110中除最高位外现只有第三位和第二位的值为1,f(10110)=f(1111)+10110-1111+f(110), f(110)=f(11)+110-11+f(10),f(10)=f(1)+10-1+f(0);
f(10110)=f(1111)+f(11)+f(1)+10110-1111+110-11+10-1+f(0),f(n个1)=n*2^(n-1)
编程实现用上述转换的方法即可
归纳得出数学公式如下:
- 编程之美_2.4 “1的数目”
- 编程之美之1的数目
- 编程之美之1的数目
- 编程之美---求1的数目
- 编程之美 2.4 “1”的数目
- 编程之美--1的数目
- 编程之美 2.4 1的数目
- 编程之美 1的数目
- 编程之美 1的数目【转】
- 编程之美 2.4 “1”的数目
- 【编程之美】1的数目
- 编程之美2.4 1的数目
- 编程之美-2.4 1的数目
- [编程之美2.4]1的数目
- 编程之美 2.4 1的数目
- 编程之美 1的数目
- 编程之美2.4 1的数目
- 编程之美:1的数目
- 秋雨寄相思
- Android 按键事件小结
- linux内核SMP负载均衡浅析
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
- Maven 使用指南(3): 简述Maven工作过程
- 编程之美_2.4 “1的数目”
- 自我编程总结
- C程序内存区域分配(5个段作用)
- Android ApiDemos示例解析(164):Views->Layouts->TableLayout->09. Toggle Shrink
- CreateDevice()
- 想你,但不爱你
- 排序算法 C++
- Android ApiDemos示例解析(165):Views->Layouts->TableLayout->10. Simple Form
- [转] 101个Google搜索技巧,你都会哪几个?