Mapping 约束序列到索引映射

Mapping 约束序列到索引映射,mapping,discrete-mathematics,Mapping,Discrete Mathematics,我对如何将一组序列映射到连续整数感到困惑 所有序列都遵循此规则: A_0 = 1 A_n >= 1 A_n <= max(A_0 .. A_n-1) + 1 练习的重点是获得一个压缩表,该表在有效序列和单元格之间具有1-1映射 集合的大小仅以可能的唯一序列数为界 我现在不知道序列的长度是多少,但它将是一个小的,这是一个python函数,它可以为您完成这项工作,假设您将这些值存储在一个文件中,并将行传递给函数 def valid_lines(lines): for lin

我对如何将一组序列映射到连续整数感到困惑

所有序列都遵循此规则:

A_0 = 1
A_n >= 1
A_n <= max(A_0 .. A_n-1) + 1

  • 练习的重点是获得一个压缩表,该表在有效序列和单元格之间具有1-1映射
  • 集合的大小仅以可能的唯一序列数为界

  • 我现在不知道序列的长度是多少,但它将是一个小的,这是一个python函数,它可以为您完成这项工作,假设您将这些值存储在一个文件中,并将行传递给函数

    def valid_lines(lines):
        for line in lines:
            line = line.split(",")
            if line[0] == 1 and line[-1] and line[-1] <= max(line)+1:
                yield line
    
    lines = (line for line in open('/tmp/numbers.txt'))
    for valid_line in valid_lines(lines):
        print valid_line
    
    def有效_行(行):
    对于行中的行:
    行=行。拆分(“,”)
    
    如果行[0]==1,行[-1]和行[-1]给定序列,我会对其进行排序,然后使用排序序列的哈希作为表的索引。

    我认为不排序的哈希应该是正确的


    因为A0总是以0开头,我想我们可以把序列看作是一个以12为基数的数字,用它的基数10作为查找的键。(仍然不确定)。

    有一个自然的序列索引,但没有那么容易计算

    让我们寻找一个n>0的n,因为A\u 0=1

    索引分两步完成

    第1部分: 按A_n=max(A_0..A_n-1)+1的位置对序列进行分组。把这些地方叫做台阶

    • 台阶上有连续的数字(2,3,4,5,…)
    • 在非步数的地方,我们可以把指数小于k的数字从1到步数

    每个组都可以表示为二进制字符串,其中1为单步,0为非单步。例如,001001010表示带有112aa3b4c的组,aThat需要枚举整个集合,然后进行查找。这就是我试图避免的,散列部分(没有排序)会起作用,但我需要生成一个包含数千个条目的完美散列。我不是在寻找一个非常有趣的问题,只是我不清楚“我希望能够在给定这样一个序列的情况下,查找一个表,并在该表中给定一个索引,生成该序列。“。可以再解释一下,可以举个例子吗?谢谢。问题在哪里?我看不到任何问号?这不是危险。虽然我没有明确提出问题,但我认为隐含的问题一点也不难发现。有趣。这并没有完全解决如何以/packed/的方式将两个恢复数映射成整数的问题,但是我可以看到一些方法来开始。
    1,1,2,3,2,1,4
    1,1,2,3,1,2,4
    1,2,3,4,5,6,7
    1,1,1,1,2,3,2
    
    1,2,2,4
    2,
    1,1,2,3,5
    
    def valid_lines(lines):
        for line in lines:
            line = line.split(",")
            if line[0] == 1 and line[-1] and line[-1] <= max(line)+1:
                yield line
    
    lines = (line for line in open('/tmp/numbers.txt'))
    for valid_line in valid_lines(lines):
        print valid_line
    
    T(l,n) = n*T(l-1,n) + T(l-1,n+1)
    T(1,n) = n
    
    T(7,1) +         # for 1000000
    2^2 * T(4,2) +   # for 001000
    2^2 * 3 * T(2,3) # for 010