将伪代码翻译成python?
我需要一些帮助将其翻译成python, 我在代码中提出了一些问题,希望能得到一些帮助:) 代码背后的想法我很理解,一种二进制乘法的分治技术 你们是怎么用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
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
ton==1
而不是是的,关于忘记第一个基本情况的错误,我的坏!二进制文件是一个输入错误对不起!有一个指向代码的链接,我很确定它是“+”sign.Edit:本课程中没有并行编程。我只是在谷歌搜索时找到了这个链接。重点是进行二进制乘法,我想将我找到的算法实现到python中,这没关系。最难的部分是我所相信的算法分析。但这是另一个问题。是的,我忽略了移位部分,因为我这样做了不知道该写在哪里!THX这个二进制乘法(没有并行编程)你的python代码是什么?@Depenz:我想我应该从尽可能直接的翻译开始。让我编辑答案。