python - 您将如何在 Assembly 中有效地重写此 python 代码
问题描述
因此,作为一个挑战,我发布了这个 python 代码:
NIZ1 = 'yxem Nx yzcdxo, am knxfx Vcjs, Gbnnws rx ejnm nj Zxcj'
SEZNAM1 = 'xfjrmansobyzcdwke'
SEZNAM2 = 'adegiklmnoprstuvz'
NIZ2 = ''
for char in NIZ1:
if char.islower():
for e in SEZNAM1:
if char == e:
NIZ2 += SEZNAM2[SEZNAM1.index(char)]
else:
NIZ2 += char
print(NIZ2)
看看是否有人可以在 Assembly 中有效地重写它。python代码基本上做的是;它通过 NIZ1 并检查如果 NIZ 字符串的小写字母是 SEZNAM1 的元素,则将其替换为 SEZNAM2 的大写字母,与 SEZNAM1 中的位置相同。
你可以运行python代码来看看你是否得到正确的答案。
解决方案
性能是通过减少工作量或分散负载的算法来实现的,有时还通过汇编或其他语言的特殊功能来实现。
尽管如此,在这里您还是在进行大量搜索,使用嵌套的 for 循环,一次使用.index
内部循环。
使用算法的另一种方法,我们可以避免除外循环之外的所有内容:
创建输入字符到输出字符的映射,因此对于“a”的输入,您输出“x”,对于“d”输出“f”等。对于大写、标点符号和所有其他字符,输出是相同的值作为输入。
那么算法就变成了:
for char in NIZ1
NIZ2 += map[char]
在汇编或任何语言中,我会创建map
一个数组。
接下来,您需要查看+=
执行字符串附加的操作,这可能非常低效。因此,我们更愿意在循环之外(和之前)预先为循环分配空间,我们可以这样做,因为我们知道我们需要与输入字符串NIZ2
for 相同的大小。NIZ1
i = 0
for char in NIZ1
NIZ2[i++] = map[char] # update 1 char instead of string append
推荐阅读
- sql - 具有 JSON 对象的 PostgreSQL 查询列,其中嵌套了另一个 JSON 对象的数组
- ruby-on-rails - 元素导轨之间有空间吗?
- python - Python:在两列之间创建某种 cumsum
- python - 使用 OpenCV for python 生成的图像在 docker 容器中运行时比在本地机器上运行时更大
- sql - 连接到 SQL Server 数据库时出现 TCP/IP 连接错误
- react-native - 在 bazel 构建中运行 react-native cli
- r - 将两个列表组合成一个数据框,保留行名
- asp.net - 我们可以使用 http.sys 在 linux 容器上运行应用程序吗?
- msbuild - msbuild 如何从多框架 nuget 包中解析程序集?
- ios - 为什么我的 TableView 只显示每个单元格中加载的最后一张图片?(迅速)