Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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_Syntax_Translate - Fatal编程技术网

将伪代码翻译成python?

将伪代码翻译成python?,python,syntax,translate,Python,Syntax,Translate,我需要一些帮助将其翻译成python, 我在代码中提出了一些问题,希望能得到一些帮助:) 代码背后的想法我很理解,一种二进制乘法的分治技术 你们是怎么用python写的 def mult(A,B): n = len(A) if (n <= 1): return (A[0]*B[0]) p = A[0:n/2] q = A[n/2:n] r = B[0:n/2] s

我需要一些帮助将其翻译成python, 我在代码中提出了一些问题,希望能得到一些帮助:) 代码背后的想法我很理解,一种二进制乘法的分治技术

你们是怎么用python写的

def mult(A,B):

        n = len(A)
        if (n <= 1):
            return (A[0]*B[0])

        p = A[0:n/2]
        q = A[n/2:n]
        r = B[0:n/2]
        s = B[n/2:n]

        pr = mult(p,r)
        ps = mult(p,s)
        rq = mult(r,q)
        qs = mult(q,s)

        sum = ps + rq # no problem adding like this I guess
def mult(A,B):
n=len(A)

如果(n首先,我认为这根本不是伪代码,而是用真实语言编写的代码,可能是从(S)ML派生出来的。如果你知道它是什么语言,解释它会容易得多,而不是试图猜测像
shift
这样的东西意味着什么,你可以在文档中查找该语言


话虽如此,有许多事情你显然翻译错了


首先,你扭转了这个局面:

if |A| ≤ 1
……在这方面:

n = len(A)
if (n == 1):
除了添加无意义的额外括号外,您还打破了A为空的递归基本情况


接下来,
par
的意思可能是“如果您愿意,您可以并行执行这些操作”,因此可以忽略它。另一方面,考虑到您是从并行算法和数据结构类的课堂讲稿中获取这一点,您忽略的事情可能就是重点。显然,在Python中,您需要将其映射到其他内容,例如,创建一个
并发.futures.ProcessPoolExecutor
,提交四个递归调用,然后等待所有四个未来?(虽然这可能是一种尽可能晚的绑定语言,在这种情况下,您不想在这里等待未来,而是要更改使用这些值之一的每个表达式,以便它等待所需的未来,并将这些表达式提交给执行者。)


无论如何,您已经将对所定义函数的递归调用转换为对某些不同函数的调用。所有这些:

    pr = binary_mult(p,r)
    ps = binary_mult(p,s)
    rq = binary_mult(r,q)
    qs = binary_mult(q,s)
…需要调用
mult


let…in…end
实际上是一种表示第一个…是第二个…的一组局部变量的方式。您可以将其转换为,例如,在每个变量上用
del
替换
end
,但我认为可以忽略这一点

但你忽略了最重要的部分,这一点:

shift(pr, n) + shift(sum, n/2) + qs
我不确定最后一个
+
是否是
+
。它可能是一个不同的符号,或者是光标在
+
上移动时拍摄的屏幕截图,或者是对
+
上有灰尘斑点的打印输出的扫描,或者是其他一些很好的例子,说明当您需要有关代码I的帮助时,为什么应该发布文本而不是文本图片那篇文章

无论如何,你需要做任何正在做的事情(并返回结果)。这是函数的关键部分;所有的
let…in
内容都是为这个表达式设置的


根据您对函数含义的猜测,以及我对几乎SML语法的猜测,忽略并行位,类似于您所写的内容接近于直接翻译:

def shift(A, n):
    # Taking a wild guess
    return A + [0 for _ in range(n)]

def mult(A, B):
    n = len(A)
    if n <= 1:
        return [A[0] * B[0]]
    else:
        p, q = A[:n//2], A[n//2:]
        r, s = B[:n//2], B[n//2:]
        pr, ps, rq, qs = mult(p, r), mult(p, s), mult(r, q), mult(q, s)
        sum = ps + rq
        return pr << n + sum << n//2 + qs
def换档(A,n):
#胡乱猜测
为范围(n)内的uu返回+0
def mult(A、B):
n=len(A)

如果n在没有伪代码的情况下,你希望我们如何翻译这个伪代码?我也不知道你的代码在做什么,你需要添加注释第一句话中有一个指向伪代码的链接。它执行递归二进制乘法!(我的代码不完整)-检查链接。你在哪里找到这个伪代码?还有,它中使用的“
par
”函数有什么作用?我在第5页的末尾找到了它。你为什么翻译
|A |≤ 1
to
n==1
而不是
是的,关于忘记第一个基本情况的错误,我的坏!二进制文件是一个输入错误对不起!有一个指向代码的链接,我很确定它是“+”sign.Edit:本课程中没有并行编程。我只是在谷歌搜索时找到了这个链接。重点是进行二进制乘法,我想将我找到的算法实现到python中,这没关系。最难的部分是我所相信的算法分析。但这是另一个问题。是的,我忽略了移位部分,因为我这样做了不知道该写在哪里!THX这个二进制乘法(没有并行编程)你的python代码是什么?@Depenz:我想我应该从尽可能直接的翻译开始。让我编辑答案。