上海网站设计培训班wordpress类别id
上海网站设计培训班,wordpress类别id,百度有做企业网站吗,电商网站开发计划Python算法题集_全排列 题46#xff1a;全排列1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【标记数组递归】2) 改进版一【指针递归】3) 改进版二【高效迭代模块】4) 改进版三【高效迭代模块极简代码】 4. 最优算法5. 相关资源 本文为Python… Python算法题集_全排列 题46全排列1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【标记数组递归】2) 改进版一【指针递归】3) 改进版二【高效迭代模块】4) 改进版三【高效迭代模块极简代码】 4. 最优算法5. 相关资源 本文为Python算法题集之一的代码示例
题46全排列
1. 示例说明 给定一个不含重复数字的数组 nums 返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1 输入nums [1,2,3]
输出[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2 输入nums [0,1]
输出[[0,1],[1,0]]示例 3 输入nums [1]
输出[[1]]提示 1 nums.length 6-10 nums[i] 10nums 中的所有整数 互不相同 2. 题目解析
- 题意分解
本题是计算集合的全排列组合基本的设计思路是递归计算组合
- 优化思路 通常优化减少循环层次 通常优化增加分支减少计算集 通常优化采用内置算法来提升计算速度 分析题目特点分析最优解 每加一个元素添加的组合等于旧元素全排列集合与新元素各排列一次以此递归 可以考虑用高效迭代模块单元itertools - 测量工具
本地化测试说明LeetCode网站测试运行时数据波动很大【可把页面视为功能测试】因此需要本地化测试解决数据波动问题CheckFuncPerf本地化函数用时和内存占用测试模块已上传到CSDN地址Python算法题集_检测函数用时和内存占用的模块本题本地化超时测试用例自己生成详见章节【最优算法】代码文件包含在【相关资源】中 3. 代码展开
1) 标准求解【标记数组递归】
使用标记数组记录前置组合递归求解
页面功能测试马马虎虎超过54%
import CheckFuncPerf as cfpclass Solution:def permute_base(self, nums):paths []ilen len(nums)def dfspermute(nums, path):if len(path) ilen:paths.append(path[:])returnfor num in nums:pathleft path[:]pathleft.append(num)numsresidue nums[:]numsresidue.remove(num)dfspermute(numsresidue, pathleft)dfspermute(nums, [])return pathsaSolution Solution()
result cfp.getTimeMemoryStr(aSolution.permute_base, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))# 运行结果
函数 permute_base 的运行时间为 6231.28 ms内存使用量为 549252.00 KB 执行结果 36288002) 改进版一【指针递归】
使用指针标记数组记录前置位置递归求解
页面功能测试性能卓越超越95%
import CheckFuncPerf as cfpclass Solution:def permute_ext1(self, nums):def permutation_sub(ls, start, result):if start len(ls) - 1:result.append(list(ls))returnfor i in range(start, len(ls)):ls[i], ls[start] ls[start], ls[i]permutation_sub(ls, start 1, result)ls[i], ls[start] ls[start], ls[i]perm []permutation_sub(nums, 0, perm)return permaSolution Solution()
result cfp.getTimeMemoryStr(aSolution.permute_ext1, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))# 运行结果
函数 permute_ext1 的运行时间为 4993.29 ms内存使用量为 760188.00 KB 执行结果 36288003) 改进版二【高效迭代模块】
使用高效迭代模块itertool的迭代器直接实现全排列功能
页面功能测试性能良好超过90%
import CheckFuncPerf as cfpclass Solution:def permute_ext2(self, nums):import itertoolslist_result []for perm in itertools.permutations(nums):list_result.append(list(perm))return list_resultaSolution Solution()
result cfp.getTimeMemoryStr(aSolution.permute_ext2, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))# 运行结果
函数 permute_ext2 的运行时间为 2189.55 ms内存使用量为 759268.00 KB 执行结果 36288004) 改进版三【高效迭代模块极简代码】
使用高效迭代模块itertool的迭代器直接一行生成结果减少中间变量
页面功能测试马马虎虎超过46%
import CheckFuncPerf as cfpclass Solution:def permute_ext3(self, nums):import itertoolsreturn [list(perm) for perm in itertools.permutations(nums)]aSolution Solution()
result cfp.getTimeMemoryStr(aSolution.permute_ext3, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))# 运行结果
函数 permute_ext3 的运行时间为 2016.28 ms内存使用量为 759028.00 KB 执行结果 36288004. 最优算法
根据本地日志分析最优算法为第4种方式【高效迭代模块极简代码】permute_ext3
本题测试数据似乎能推出以下结论
减少操作的独立变量可以提升极限性能【未必可保证可读性】itertool模块应该是用C等语言实现效率远高于Python代码逐行实现
nums [x for x in range(10)]
aSolution Solution()
result cfp.getTimeMemoryStr(aSolution.permute_base, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))
result cfp.getTimeMemoryStr(aSolution.permute_ext1, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))
result cfp.getTimeMemoryStr(aSolution.permute_ext2, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))
result cfp.getTimeMemoryStr(aSolution.permute_ext3, nums)
print(result[msg], 执行结果 {}.format(len(result[result])))# 算法本地速度实测比较
函数 permute_base 的运行时间为 6231.28 ms内存使用量为 549252.00 KB 执行结果 3628800
函数 permute_ext1 的运行时间为 4993.29 ms内存使用量为 760188.00 KB 执行结果 3628800
函数 permute_ext2 的运行时间为 2189.55 ms内存使用量为 759268.00 KB 执行结果 3628800
函数 permute_ext3 的运行时间为 2016.28 ms内存使用量为 759028.00 KB 执行结果 36288005. 相关资源
本文代码已上传到CSDN地址Python算法题源代码_LeetCode(力扣)_全排列
一日练一日功一日不练十日空
may the odds be ever in your favor ~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90338.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!