当前位置: 首页 > news >正文

全排列问题回溯解法

文章目录

  • 工具函数
  • 具体解法

经典全排列问题:给定一个序列,输出其所有的全排列结果.

工具函数

def time_memory(func):@functools.wraps(func)def wrapper(*args, **kwargs):tracemalloc.start()start = time.perf_counter()res = func(*args, **kwargs)duration = (time.perf_counter() - start)*1000current, peak = tracemalloc.get_traced_memory()tracemalloc.stop()print(f"{func.__name__} excution duration: {duration:.3f} ms")print(f"{func.__name__} memory usage: current = {current / 1024:.3f} KB, peak = {peak / 1024:.3f} KB")return resreturn wrapper

具体解法

思路: 给定列表可以按照树结构罗列出所有的排序结果,拓扑图如下:
pic
递归处理列表,每一层便利列表元素,将遍历的元素存储于一个trace的列表中,递归之后将trace列表最后一个元素弹出即可,详细python代码如下:

python代码如下:

@time_memory
def permutation(data: list[int]) -> list[list[int]]:res = []track = []def inner(data, track):if len(data) == len(track):# shallow copyres.append(track[:])returnfor item in data:if item in track:continuetrack.append(item)inner(data, track)track.pop()inner(data, track)return resif __name__ == '__main__':data = [1,2,3]res = permutation(data)print(res)

输出:

permutation excution duration: 0.060 ms
permutation memory usage: current = 1.127 KB, peak = 2.408 KB
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
http://www.lryc.cn/news/623205.html

相关文章:

  • Linux软件编程(六)(exec 函数族、system 实现、进程回收与线程通信)
  • 基于动捕实现Epuck2的轨迹跟踪
  • 数据结构:迭代方法(Iteration)实现树的遍历
  • 记录一下第一次patch kernel的经历
  • 【UHD】vivado 2021.1 编译
  • 解决 Microsoft Edge 显示“由你的组织管理”问题
  • c#Blazor WebAssembly在网页中多线程计算1000万次求余
  • Spring Framework:Java 开发的基石与 Spring 生态的起点
  • Agent中的memory
  • 西湖大学新国立,多模态大语言模型能指引我回家吗?ReasonMap:基于交通地图的细粒度视觉推理基准研究
  • imx6ull-驱动开发篇27——Linux阻塞和非阻塞 IO(上)
  • pdf合并代码
  • 杂记 03
  • 链表。。。
  • 全面解析Tomcat生命周期原理及其关键实现细节
  • 【论文笔记】STORYWRITER: A Multi-Agent Framework for Long Story Generation
  • 云原生俱乐部-RH124知识点总结(3)
  • 如何解决C盘存储空间被占的问题,请看本文
  • 异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
  • 后量子密码算法SLH-DSA介绍及开源代码实现
  • huggingface TRL中的对齐算法: KTO
  • 嵌入式硬件篇---BuckBoost电路
  • GPIO初始化及调用
  • AI杀死的第一个仪式:“hello world”
  • CentOS 7 一键部署 上Maria Database(MariaDB)10.3.38 安装手册(避开 Oracle 19c 路径)
  • AT89C52单片机介绍
  • Hexo 双分支部署指南:从原理到 Netlify 实战
  • Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
  • 洛谷B3865 [GESP202309 二级] 小杨的 X 字矩阵(举一反三)
  • ESP32唤醒流程