浅谈数位类统计问题课件.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

浅数位

引入?在信息学中,有一与数位有关的区。?例如:?求[1,n]中所有数的各位数字之和。?求[1,n]中各位数字之和定的数的个数。?将[m,n]中的数字分,每包含的一段数,且数字之和不能超定,求分数。?……n≤1018!?如何求解?

【例1】Amountofdegrees?求定区[X,Y]中足下列条件的整数个数:个数恰好等于K个互不相等的B的整数次之和。?例如,X=15,Y=20,K=2,B=2,有且有下列三个数足意:?17=2?18=244+20,+21,?20=24+22。?数据模:1≤X≤Y≤231?1,1≤K≤20,2≤B≤10。

【例1】Amountofdegrees?由于所求的互不相等,符合条件的数写成B制一定只由0和1成。?因此我只考B=2的情况。?此区足区减法,即count(X,Y)=count(0,Y)-count(0,X-1)?因此我唯一需要求的就是,定n,求出所有不超n的正整数中,其二制表示恰好含有K个1的有多少。

【例1】Amountofdegrees?里,我使用一棵完全二叉来代表一个区内的数。?例如右中高度4的完全二叉就可以代表所有度4的二制数。?其范[0,2-1]4?每个叶子就代表了一个数。

【例1】Amountofdegrees?假K=3,n=13,其二制1101。?我从根走到n所在的叶子?每次“向右走”,左的子都是完整的完全二叉,且所有小于n的整数都包含在其中。

【例1】Amountofdegrees?因此,我上只需三棵子?当然,不能忘n本身。中有多少数含3个棵中有多少数含2个棵中有多少数含1个1?1?1?(因祖先已有1个1)

【例1】Amountofdegrees?很容易推求出个?f[h,s]表示在高度h的完全二叉包含的数中(范是[0,2h-1]),二制中恰含s个1的数有多少。?f[h,s]=f[h-1,s]+f[h-1,s-1]左子树中的个数右子树中的个数

【例1】Amountofdegrees?剩下的就是,如何将任意制化二制?只需心将n的B制表示化只含01:找到n的左起第一位大于1的数位,将它以及它右所有数位1。?推求f的度O(log(n)),每次复度O(log(n)),因此复度O(log22(n))。?得到完美解决!

【例1】Amountofdegrees?上,我也可以只用“位”的思想来考个,而不使用的思想。?我每次找到n的1数位,将它0,其右面的数位可任取0、1。?可根据合数算出足意的数的个数。?所有“1”数位,算合数,即可完成?事上,f的推公式正是合数公式!Cf[hn,sk]==fC[h[-n1-,1s,]k+]f+[hC-[1n,s-1-1,k]-1]?与的思想异曲同工!

【例1】Amountofdegrees?使用高度h的完全B叉表示所有度h的B制数,思考起来更加直,在理复点明。?当然,最程序我并不真正建,它的作用只是帮助我思考。?无从构考是从数位的角度考,基本思逐位确定想都是:

【例4】Tickets?有一位售票乘客售票。于每位乘客,他会出多的票,直到已出的票的号的数位之和不小于定的正数K。然后他会按照相同的下一位乘客售票。?初始,售票持有的票的号是从L到R的数。你求出,售票可以售票多少位乘客。?数据模:1≤L≤R≤1018,1≤K≤1000。

【例4】Tickets?有了例1的基,本基本思路也是从特殊到一般:?能否将原的区拆分一些度10再合并得到原区的答案?k的子区,?亦即,将原拆分若干完整的完全十叉数,根据子的信息合并得到原的答案。?一个比棘手的是,棵的前几个元素可能会并入之前的小,而不是作一个新的小。?言之,只使用的高度无法表示一状。添加状!

【例4】Tickets?f[h,sum,rem]表示于高度h的完全十叉,其每个数的数位之和需要外添加sum,在棵之前的最后一个小剩余空rem,所能得到的小情况。?f返回有两个:f[h,sum,rem].a棵被划分成的小数量,f[h,sum,rem].b些小中的最后一的剩余空,以便与下一合并。functionmerge(x,y);x.a:=x.a+y.a;?同例1一,里f的也由其10棵子合并而成:x.b:=y.b;returnx;?fori:=0to9dof[h,sum,rem]:=merge(f[h,sum,rem],f[h-1,sum+i,f[h,sum,rem].b]);?也就是之前得到的b作下一棵子的rem。

【例4】Tickets?,我就解决了个子的情况。?接下来的就是如何将原分解若干子。?本不足区减法,因此于[L,R]个区,需要直接找它中的子。?了

文档评论(0)

181****8378 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档