如何在python中实现这个算法?

2024-06-07 10:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一种笛卡尔积,它是从一个初始的定长整数序列派生出来的,使用符号指定的规则生成附加序列,该符号指定必须跟随的附加序列的n个数。你知道吗

例如(^产生额外的1系列,*产生额外的3系列)

1 0^ 1* 1

生成

1 0 2 1
1 0 3 1
1 0 4 1 (we stop here because we have produced 3 additional series)

1 1 1* 1 (we have produced an additional series from the `^` symbol. still have the `*`)

1 1 2 1
1 1 3 1 
1 1 4 1

另一个例子,现在有一个更大的长度系列和附加规则。你知道吗

1 0^ 1* 0^ 1

生成

1 0 2 0 1
1 0 3 0 1
1 0 4 0 1

1 0^ 1* 1 1

1 0 2 1 1 
1 0 3 1 1 
1 0 4 1 1 

1 1 1* 1 1 

1 1 2 1 1 
1 1 3 1 1 
1 1 4 1 1 

我只是觉得无聊,开始在纸上写一系列这样的数字,很想知道是否已经有一个算法或实现生成这样的整数序列。请注意,在序列之间有一条新的线,它生成额外的序列以使其更易于理解。你知道吗


Tags: theanhere规则have符号序列整数
1条回答
网友
1楼 · 发布于 2024-06-07 10:23:44

通常,您可以对笛卡尔积使用^{}。具体来说,我将分两步实现您的算法:

  1. 将输入字符串(例如"1 0^ 1* 0^ 1")解析为整数列表;以及
  2. 生成列表列表的乘积。你知道吗

一个相对简单的基于生成器的实现,为了清晰起见,它带有一个helper函数,如下所示:

def algorithm(input_):
    # Step 1
    instructions = []
    for s in input_.split():
        try:
            instructions.append([int(s)])
        except ValueError:
            instructions.append(list(values(s)))
    # Step 2
    for prod in itertools.product(*instructions):
        yield prod

def values(s):
    RULES = {'*': 4, '^': 2}
    n = int(s[:-1])
    for x in range(RULES[s[-1]]):
        yield n + x

例如:

>>> print("\n".join(" ".join(map(str, t)) for t in algorithm("1 0^ 1* 1")))
1 0 1 1
1 0 2 1
1 0 3 1
1 0 4 1
1 1 1 1
1 1 2 1
1 1 3 1
1 1 4 1

您必须对其进行修补,以获得所需的精确顺序(您似乎有运算符,而不是从左到右的优先级)和格式(例如组之间的空格)。你知道吗

相关问题 更多 >

    热门问题