java吧 关注:1,271,245贴子:12,777,995
  • 19回复贴,共1

问一个不太明白的算法(大概

只看楼主收藏回复

打算用一个8*8的方格上取四个点来保存一些数据不多的信息,理论上可以保存C64,4=64!/(4!*60!)=635376个信息,可以把这个表映射成一个64位的2进制数,由于一些需求需要把这些数排序,比如0...01111是第一个,0...10111是第二个。但是问题是怎么样根据排序的位置找到这个二进制数,或者根据2进制数找到他的排序的位置


IP属地:山东来自Android客户端1楼2021-04-18 02:08回复
    这不很简单嘛,0...01111直接加上排序再-1自然就得到了二进制数。。找排序就反过来。


    IP属地:广东来自Android客户端2楼2021-04-18 03:32
    收起回复
      2025-07-26 21:53:08
      广告
      不感兴趣
      开通SVIP免广告
      排序?你这一个8*8不就存一个数据吗?查找位置是指哪几个位是1这个意思吗?


      IP属地:广西3楼2021-04-18 09:17
      收起回复
        大概如此,可以想想有没有效率高的


        IP属地:广东来自Android客户端4楼2021-04-18 09:58
        收起回复
          随机输入一个只有四位是1的64位二进制数,迅速判断他得自然排序是多少个,反过来输入一个1到635376之内的数字,得到他对应的64位二进制数,是这个意思吧


          IP属地:江苏5楼2021-04-19 09:35
          回复
            分享一个免费开源商城系统:http://github.crmeb.net/u/qiang


            IP属地:陕西6楼2021-04-19 09:43
            回复
              给定一个二进制数,求他的排序位置;
              1111000=C((7-1),(7-5))+C((6-1),(6-4))+C((5-1),(5-3))+C((4-1),(4-2))+1=15+10+6+3+1;
              看懂这个公式,就能写算法了;(10*0111的情况需要特殊处理,即末尾三位都是1的时候)
              给排序位置求二进制数,可以根据上面的算法反推,具体怎么写还要再想想


              IP属地:江苏7楼2021-04-19 10:43
              收起回复