Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个算法可以逆转吗?_Python - Fatal编程技术网

Python 这个算法可以逆转吗?

Python 这个算法可以逆转吗?,python,Python,嗨,我有下面的python代码 注意。。。是的,我要求你解决我的算法。。我筋疲力尽了 正在努力。如果你喜欢挑战,试试看 如果您愿意,请进行分析,但它基本上会查看列表DataListed,并确保它不包含patternsNotAllowed中的任何列表 它通过检查patternsNotAllowed中是否存在与序列DataListed的一部分匹配的大小写来完成此操作,如果找到匹配,则翻转导致DataListed中匹配的最后一位,并且该位右侧的所有位也翻转 我的问题是, 上述过程是可逆的吗? 上个星期

嗨,我有下面的python代码

注意。。。是的,我要求你解决我的算法。。我筋疲力尽了 正在努力。如果你喜欢挑战,试试看

如果您愿意,请进行分析,但它基本上会查看列表DataListed,并确保它不包含patternsNotAllowed中的任何列表

它通过检查patternsNotAllowed中是否存在与序列DataListed的一部分匹配的大小写来完成此操作,如果找到匹配,则翻转导致DataListed中匹配的最后一位,并且该位右侧的所有位也翻转

我的问题是,

上述过程是可逆的吗?

上个星期我一直在想办法解决这个问题,但我就是不能。。。下面是我尝试过的一些代码。(做同样的事情会倒退,但显然不起作用)。此外,我知道您可以存储翻转发生反转的位置,但我希望避免这样做。(但我开始认为这是不可能的)

任何帮助都将不胜感激

谢谢


Woody不,它是不可逆的

如果
patternsontallowed=[[0]]
,您将从输入列表
[0,1]
[1,1]
中获得相同的结果
[1,1]


由于有多个输入具有相同的输出,因此无法判断哪个输入产生了输出,因此无法将其转换为实际输入。

不,这是不可逆的

如果
patternsontallowed=[[0]]
,您将从输入列表
[0,1]
[1,1]
中获得相同的结果
[1,1]


由于有多个输入具有相同的输出,因此无法判断是哪个输入产生了输出,因此您无法将其转换为实际输入。

要添加到Barmar的答案中,使用您自己的
模式下载的
列表也是不可逆的。有2^13=8192个长度为13的不同列表,其中只包含0和1,我们可以使用以下方法尝试所有列表:

>>len({
…元组(条件数据(列表(a),模式未安装))
…对于itertools.product((0,1),重复=13)
... })
...
178

(为了测试这一点,我删除了所有的print语句。)通过将它们放入一个集合并找到长度,我们可以看到只有178个不同的输出,因此每个输出平均有8192/178个≈ 46个不同的预图像。

要补充Barmar的答案,使用您自己的
模式下载的
列表也无法恢复。有2^13=8192个长度为13的不同列表,其中只包含0和1,我们可以使用以下方法尝试所有列表:

>>len({
…元组(条件数据(列表(a),模式未安装))
…对于itertools.product((0,1),重复=13)
... })
...
178

(为了测试这一点,我删除了所有的print语句。)通过将它们放入一个集合并找到长度,我们可以看到只有178个不同的输出,因此每个输出平均有8192/178个≈ 46种不同的预成像。

直觉上,这似乎是不可逆的。如何判断位是翻转的结果还是原始值
这与
x
?x+1不一样吗?但是是的@BarmarI我想我的问题更像是我该怎么做:我甚至可能改变我避免我不想改变的序列的方式?我不明白这个问题。你到底想做什么?直觉上这似乎是不可逆的。如何判断位是翻转的结果还是原始值
这与
x
?x+1不一样吗?但是是的@BarmarI我想我的问题更像是我该怎么做:我甚至可能改变我避免我不想改变的序列的方式?我不明白这个问题。你到底想做什么?更一般地说,我认为列表经过的所有中间状态都是可能的输入,它们将产生相同的输出。更一般地说,我认为列表经过的所有中间状态都是可能的输入,它们将产生相同的输出。
dataListEdited = [0,1,1,1,0,0,1,0,1,0,1,1,0]    #This is just random 1's and 0's

patternsNotAllowed = [[1,1,1],[0,0,0],[1,0,1,0,1],[0,1,0,1,0],[1,1,0,0,1,1],[0,0,1,1,0,0]]

#Condition data
def conditionData(dataListEdited,patternsNotAllowed):
    offset=0
    for x in range(len(dataListEdited)):
        print(dataListEdited[:x+1])
        for notAllowed in patternsNotAllowed:
            if(len(dataListEdited[:x+1])> len(notAllowed)-1):
                if((dataListEdited[(x+1)-len(notAllowed):x+1]) == notAllowed):
                    print("Matched"+str(notAllowed))
                    lenToFlip = len(dataListEdited) - x +1
                    print(dataListEdited)
                    print("Swap @" + str(lenToFlip-1))
                    for y in range(lenToFlip-1):
                        if(not(dataListEdited[-y-1]) == True):
                            dataListEdited[-y-1] = 1
                        else:
                            dataListEdited[-y-1] = 0
                    print(dataListEdited)
                    offset = x
                    break
    return dataListEdited
def unconditionData(dataListEdited,patternsNotAllowed):
    for x in range(len(dataListEdited)):
        if(not(dataListEdited[-1-x]) == True):
            dataListEdited[-1-x] = 1
        else:
            dataListEdited[-1-x] = 0
        #print(dataListEdited)
        for notAllowed in patternsNotAllowed:
            #print(dataListEdited[len(dataListEdited)- x - len(notAllowed):len(dataListEdited)-x])
            if(dataListEdited[len(dataListEdited)- x - len(notAllowed):len(dataListEdited)-x] == notAllowed):
                print("Matched " + str(notAllowed))
                lastFlipPoint = len(dataListEdited)- x
                break

    return dataListEdited