当前位置: 首页 > 知识库问答 >
问题:

秩和非秩约束组合

融烨华
2023-03-14

我想用元素距离约束对组合进行排序和取消排序。选定的元素不能重复。

例如:

n:=10元素从中选择

k:=5正在选择的元素

d:=32个选择元素之间的最大距离

1,3,5,8,9与约束匹配

1,5,6,7,8与约束不匹配

在给定距离约束下,1,2,3,4,5小于1,2,3,4,6,如何对组合进行排序?有没有一种方法可以在不计算较小秩的组合的情况下进行排序?

共有1个答案

汤飞
2023-03-14

您可以通过首先创建并填充二维数组来实现这一点,我将其称为“有效尾数”的NVT,以记录从给定值的特定位置开始的有效“尾数”。例如,NVT[4][6]

  • 要填充NVT,请从NVT[k][…]开始,这只是所有1的一行。然后回到之前的工作岗位;例如,NVT[2][5]

完成后,您可以计算组合C的秩,如下所示:

  • 对于位置#1,从位置#1开始计算所有值小于C[1]的有效尾。例如,如果C以3开始,那么这将是NVT[1][1]

相反,你可以找到具有给定秩r的组合C,如下所示:

  • 创建一个临时变量rr,用于"剩余排名",最初等于r。
  • 要查找C[1]-位置#1中的值-从位置#1开始计算有效的尾巴,从可能的最小值(即1)开始,一旦超过rr就停止。例如,由于NVT[1][1]

复杂性分析:

  • 空间:
  • 填充NVT需要O(nkd)时间。(注意:如果d大于n,那么我们可以设置d等于n。)
  • 给定NVT,计算给定组合的秩需要最坏情况下的O(nk)时间。
  • 给定NVT,计算给定秩的组合需要最坏情况下的O(nk)时间。

实施说明:以上细节有点繁琐;如果你没有具体的数据可以查看,那么很容易一个错误就搞定了,或者混淆了两个变量,或者诸如此类的事情。由于您的示例只有168个有效组合,我建议您生成所有组合,以便在调试期间可以引用它们。

可能的额外优化:如果您希望n相当大,并且希望对“rank”和“unrank”组合进行大量查询,那么您可能会发现创建第二个数组很有用,我将其称为NVTLT,表示“有效尾数小于”,记录从某个位置开始且值小于给定值的有效“尾数”。例如,NVTLT[3][5]

 类似资料:
  • 对于正整数n和k,设“n的k-fibonacci位序列”为k的位序列,其中索引上的描述不但是。这些正整数加起来等于n,并让给定的k-fibonnaci位序列n的“秩”作为其在所有这些fibonacci位序列的排序列表中的位置,以字典顺序从0开始。 例如,对于数字39,我们有以下有效的k-斐波那契-比特序列,k 34 21 13 8 5 3 2 1代码 k=2秩=0 k=3秩=0 k=3秩=1 k=

  • 对于正整数n和k,让“n的k-分区”是k个加起来等于n的不同正整数的有序列表,让给定n的k-分区的“秩”是它在所有这些列表的有序列表中的位置,从0开始。 例如,有两个5(n)的2分区 所以,我想做两件事: 给定n,k和n的k-划分,我想求n的k-划分的秩。 给定n,k和一个秩,我想找到n的k-划分 我能做到这一点,而不必计算n的所有k-划分,在感兴趣的k-划分之前吗? 这个问题与其他问题不同,因为

  • 我在WooCommerce开发一个网店(v 2.4.6)。在本地机器上,WooCoommerce使用密钥和订单标识创建订单。 当我把代码放在实时环境中时,WooCommerce不会创建订单密钥并给出错误 在错误的地方有这样的代码: 函数“wc_get_order($order_id)”在创建订单后获取订单,并返回订单对象。 所以我猜WooCommerce不会在结帐过程后创建订单。有没有人经历过这个

  • 刚面完一场离谱的面试后,下午5.30面的秩鼎; 大致流程是,上来还是发了个数据列表,不过这次正常点,发的是一个列表;要求自己把列表数据存起来,自己查出来。 刚开始没理解清除意思,我直接写了个二分查找;之后实现这个需求,要求输入序号或者名称都可查询到,还好最后实现了。 没问题之后: 1.自我介绍 2.JS事件循环机制的理解 3.JS闭包的理解及用途 4.看了下之前做的项目 5.能实习多久?学校里的课

  • 我试图建立一个CNN RNN模型,我得到以下错误。任何帮助都将不胜感激。 FC2具有形状(?,4096) 文件“rcnn.py”,第182行,在模型输出中。nn。动态文件(stack[fc2],dtype=tf.float32) 文件/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py”,第574行,在动态文件dty

  • 主要内容:在创建表时设置非空约束,在修改表时添加非空约束,删除非空约束MySQL非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。 比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约