排列问题解析:从回溯算法到工程实践
1. 排列问题概述与基础概念排列问题是计算机科学和数学中的经典课题也是算法竞赛和面试中的高频考点。简单来说排列问题就是研究如何将一组元素按照特定顺序进行排列组合。比如我们有数字1、2、3它们的全排列就是[1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]、[3,2,1]这六种可能。在实际应用中排列问题无处不在。从密码破解中的暴力枚举到电商平台的商品推荐排序再到生物信息学中的DNA序列分析都需要用到排列相关的算法。掌握排列问题的求解方法不仅能帮助我们解决具体的技术问题更能培养我们的算法思维和问题分解能力。排列问题通常可以分为几大类全排列问题生成所有可能的排列部分排列问题从n个元素中取k个进行排列带限制条件的排列如不允许某些元素相邻带重复元素的排列如输入中有重复数字提示初学者常犯的错误是混淆排列(permutation)和组合(combination)。排列考虑顺序组合不考虑顺序。比如[1,2]和[2,1]是不同的排列但是相同的组合。2. 全排列问题的经典解法2.1 回溯算法实现回溯法是解决排列问题的标准解法其核心思想是通过递归尝试所有可能性并在发现当前路径不可能得到解时回退到上一步。下面我们以数字[1,2,3]的全排列为例详细解析回溯法的实现过程。def permute(nums): def backtrack(first0): if first n: output.append(nums[:]) for i in range(first, n): nums[first], nums[i] nums[i], nums[first] # 交换 backtrack(first 1) # 递归下一层 nums[first], nums[i] nums[i], nums[first] # 撤销交换 n len(nums) output [] backtrack() return output这个算法的精妙之处在于通过first参数标记当前处理的位置通过交换操作避免使用额外空间存储路径递归结束后撤销交换确保不影响后续分支时间复杂度分析对于n个元素的全排列共有n!种可能每次生成一个排列需要O(n)时间因此总时间复杂度为O(n×n!)。2.2 使用库函数简化实现在实际开发中我们可以利用Python标准库的itertools.permutations来简化实现from itertools import permutations nums [1, 2, 3] print(list(permutations(nums)))这种方法虽然简洁但有两个缺点返回的是元组而非列表对于初学者来说无法理解底层实现原理注意在算法面试中通常要求自己实现排列算法直接调用库函数可能会被扣分。3. 处理带重复元素的排列问题当输入列表包含重复元素时如[1,1,2]直接使用上述方法会产生重复的排列。我们需要对算法进行优化避免生成重复结果。3.1 回溯法优化方案def permuteUnique(nums): def backtrack(first0): if first n: output.append(nums[:]) return used set() for i in range(first, n): if nums[i] in used: # 跳过重复元素 continue used.add(nums[i]) nums[first], nums[i] nums[i], nums[first] backtrack(first 1) nums[first], nums[i] nums[i], nums[first] n len(nums) output [] backtrack() return output关键改进点在每一层递归中使用集合记录已经使用过的元素遇到重复元素时直接跳过确保同一位置不会放置相同的元素3.2 排序剪枝法另一种常见方法是先排序然后在回溯过程中跳过与前一个相同且未被使用的元素def permuteUnique(nums): nums.sort() n len(nums) used [False] * n output [] def backtrack(path): if len(path) n: output.append(path[:]) return for i in range(n): if used[i] or (i 0 and nums[i] nums[i-1] and not used[i-1]): continue used[i] True path.append(nums[i]) backtrack(path) path.pop() used[i] False backtrack([]) return output这种方法虽然需要额外的used数组但逻辑更加清晰适合初学者理解。4. 排列问题的进阶应用4.1 排列在密码破解中的应用排列算法可以用于生成所有可能的密码组合。例如假设我们知道密码由4位数字组成但不确定顺序我们可以from itertools import permutations digits [1, 3, 5, 7] # 假设这是密码包含的数字 for p in permutations(digits, 4): attempt .join(map(str, p)) # 这里可以添加密码验证逻辑 print(f尝试密码: {attempt})实际应用中这种暴力破解方法效率很低但对于短密码或已知部分信息的场景仍有一定价值。4.2 排列在游戏开发中的应用在棋类游戏中AI需要评估各种走法的可能性。排列算法可以帮助生成可能的走法序列def generate_moves(pieces): # 生成棋子所有可能的移动顺序 return permutations(pieces) # 示例象棋中车马炮的移动顺序 chess_pieces [车, 马, 炮] for move_seq in generate_moves(chess_pieces): print(移动顺序:, - .join(move_seq))4.3 排列在数据分析中的应用在A/B测试中我们需要评估不同页面元素排列组合对转化率的影响page_elements [标题A, 图片B, 按钮C, 推荐D] # 生成所有3元素排列用于测试 for test_case in permutations(page_elements, 3): print(测试组合:, test_case) # 这里可以添加实际测试逻辑5. 排列算法的性能优化5.1 剪枝策略优化对于大规模排列问题合理的剪枝可以大幅提高效率。例如在解决数独问题时def solve_sudoku(board): def is_valid(row, col, num): # 检查行、列、3x3宫格是否有效 pass def backtrack(row0, col0): if row 9: return True if col 9: return backtrack(row1, 0) if board[row][col] ! .: return backtrack(row, col1) for num in map(str, range(1, 10)): if is_valid(row, col, num): board[row][col] num if backtrack(row, col1): return True board[row][col] . return False backtrack()5.2 迭代法替代递归对于特别大的n递归可能导致栈溢出。我们可以用迭代法实现排列def permute_iterative(nums): stack [(nums, [])] res [] while stack: nums, path stack.pop() if not nums: res.append(path) for i in range(len(nums)): new_nums nums[:i] nums[i1:] stack.append((new_nums, path [nums[i]])) return res5.3 并行计算加速对于计算密集型排列问题可以使用多进程加速from multiprocessing import Pool def worker(chunk): return [p for p in permutations(chunk)] if __name__ __main__: data [1, 2, 3, 4, 5, 6, 7, 8] chunk_size len(data) // 4 chunks [data[i:ichunk_size] for i in range(0, len(data), chunk_size)] with Pool(4) as p: results p.map(worker, chunks) all_permutations [] for r in results: all_permutations.extend(r)6. 常见问题与解决方案6.1 内存不足问题当n较大时(如n10)全排列会占用大量内存。解决方案使用生成器而非列表存储结果分批处理排列结果考虑使用磁盘存储中间结果# 生成器实现 def permute_generator(nums): if len(nums) 1: yield nums else: for i in range(len(nums)): for p in permute_generator(nums[:i] nums[i1:]): yield [nums[i]] p6.2 重复排列问题即使输入有重复元素某些实现仍可能产生重复排列。解决方法使用集合去重内存消耗大在生成过程中剪枝推荐# 高效去重方法 def permute_unique_efficient(nums): perms [[]] for num in nums: new_perms [] for perm in perms: for i in range(len(perm)1): if i 0 and perm[i-1] num: # 关键去重逻辑 break new_perms.append(perm[:i] [num] perm[i:]) perms new_perms return perms6.3 排列顺序控制有时需要按特定顺序生成排列如字典序可以先排序输入数组使用按字典序生成排列的算法def next_permutation(nums): # 实现字典序下一个排列 i len(nums) - 2 while i 0 and nums[i] nums[i1]: i - 1 if i 0: j len(nums) - 1 while nums[j] nums[i]: j - 1 nums[i], nums[j] nums[j], nums[i] nums[i1:] reversed(nums[i1:]) return nums7. 排列问题的扩展与变种7.1 部分排列问题从n个元素中取k个进行排列数量为P(n,k)n!/(n-k)!def partial_permute(nums, k): if k 0: return [[]] res [] for i in range(len(nums)): for p in partial_permute(nums[:i] nums[i1:], k-1): res.append([nums[i]] p) return res7.2 带限制条件的排列如解决灯光开关问题要求某些元素不能相邻def restricted_permute(nums, restrictions): def backtrack(path): if len(path) len(nums): res.append(path[:]) return for num in nums: if num in path: continue if path and (path[-1], num) in restrictions: continue path.append(num) backtrack(path) path.pop() res [] backtrack([]) return res7.3 排列的排名问题计算某个排列在所有排列中的字典序排名def permutation_rank(perm): rank 0 for i in range(len(perm)): count sum(1 for x in perm[i1:] if x perm[i]) rank count * factorial(len(perm) - i - 1) return rank8. 排列问题的可视化与调试8.1 递归树可视化理解排列生成过程的有效方法是绘制递归树。以[1,2,3]为例初始状态[1,2,3] 第一层选择 - 选1剩余[2,3] - 选2剩余[3] → [1,2,3] - 选3剩余[2] → [1,3,2] - 选2剩余[1,3] - 选1剩余[3] → [2,1,3] - 选3剩余[1] → [2,3,1] - 选3剩余[1,2] - 选1剩余[2] → [3,1,2] - 选2剩余[1] → [3,2,1]8.2 调试技巧在实现排列算法时可以添加调试输出def backtrack(first0, depth0): indent * depth print(f{indent}进入回溯first{first}, nums{nums}) if first n: print(f{indent}找到排列: {nums[:]}) output.append(nums[:]) return for i in range(first, n): print(f{indent}尝试交换位置{first}和{i}) nums[first], nums[i] nums[i], nums[first] backtrack(first 1, depth 1) nums[first], nums[i] nums[i], nums[first] print(f{indent}撤销交换位置{first}和{i})8.3 性能分析工具使用Python的cProfile分析排列算法性能import cProfile def test_performance(): nums list(range(8)) # n8时已经有40320种排列 permute(nums) cProfile.run(test_performance())9. 排列问题的实际工程应用9.1 测试用例生成在软件测试中排列算法可以生成各种输入组合def generate_test_cases(inputs): test_cases [] for r in range(1, len(inputs)1): test_cases.extend(permutations(inputs, r)) return test_cases9.2 路由规划优化在物流配送中排列算法帮助评估不同配送路线的效率def evaluate_routes(locations): min_distance float(inf) best_route None for route in permutations(locations): distance calculate_distance(route) if distance min_distance: min_distance distance best_route route return best_route, min_distance9.3 用户界面布局在UI设计中排列算法帮助评估不同控件布局的用户体验def evaluate_layouts(ui_components): best_score -1 best_layout None for layout in permutations(ui_components): score usability_test(layout) if score best_score: best_score score best_layout layout return best_layout10. 排列问题的数学基础与理论10.1 排列的数学性质排列数与组合数的关系排列数P(n,k) n!/(n-k)!组合数C(n,k) P(n,k)/k!排列的奇偶性每个排列可以表示为一系列对换的乘积排列的奇偶性取决于所需对换次数的奇偶性10.2 排列群理论在抽象代数中所有n个元素的排列构成对称群Sₙ群阶为n!每个排列是群的一个元素排列的复合运算对应群的乘法10.3 排列与图论排列可以表示为有向图中的环每个排列对应一个特定的图结构排列的阶等于图中环的长度的最小公倍数def permutation_cycles(perm): visited [False] * len(perm) cycles [] for i in range(len(perm)): if not visited[i]: cycle [] j i while not visited[j]: visited[j] True cycle.append(j) j perm[j] cycles.append(cycle) return cycles11. 排列问题的替代解法11.1 Heap算法Heap算法是一种高效的排列生成算法通过相邻元素交换生成所有排列def heap_permute(n, nums): if n 1: yield nums.copy() else: for i in range(n): yield from heap_permute(n - 1, nums) if n % 2 1: nums[0], nums[n-1] nums[n-1], nums[0] else: nums[i], nums[n-1] nums[n-1], nums[i]11.2 Johnson-Trotter算法该算法通过移动活动元素生成排列特点是相邻排列只相差一次交换def johnson_trotter(n): perm list(range(1, n1)) dirs [-1] * n # 方向-1表示左1表示右 mobile True yield perm.copy() while mobile: mobile False max_mobile 0 # 找出最大的活动元素 for i in range(n): if (dirs[i] -1 and i 0 and perm[i] perm[i-1]) or \ (dirs[i] 1 and i n-1 and perm[i] perm[i1]): if perm[i] max_mobile: max_mobile perm[i] mobile_pos i mobile True if mobile: # 交换活动元素 swap_pos mobile_pos dirs[mobile_pos] perm[mobile_pos], perm[swap_pos] perm[swap_pos], perm[mobile_pos] dirs[mobile_pos], dirs[swap_pos] dirs[swap_pos], dirs[mobile_pos] # 反转比活动元素大的元素的方向 for i in range(n): if perm[i] max_mobile: dirs[i] * -1 yield perm.copy()11.3 字典序生成算法按字典序生成所有排列的迭代算法def lexicographic_permute(nums): nums sorted(nums) yield nums.copy() while True: # 步骤1找到最大的i使nums[i] nums[i1] i len(nums) - 2 while i 0 and nums[i] nums[i1]: i - 1 if i 0: break # 步骤2找到最大的j使nums[j] nums[i] j len(nums) - 1 while nums[j] nums[i]: j - 1 # 步骤3交换nums[i]和nums[j] nums[i], nums[j] nums[j], nums[i] # 步骤4反转i1到末尾 nums[i1:] nums[i1:][::-1] yield nums.copy()12. 排列问题的优化技巧12.1 提前终止条件在某些应用中我们可能不需要生成所有排列找到符合条件的就可以终止def find_target_permutation(nums, target_condition): def backtrack(first0): if first len(nums): if target_condition(nums): return nums.copy() return None for i in range(first, len(nums)): nums[first], nums[i] nums[i], nums[first] result backtrack(first 1) if result is not None: return result nums[first], nums[i] nums[i], nums[first] return None return backtrack()12.2 记忆化技术对于有重叠子问题的排列问题可以使用记忆化存储中间结果from functools import lru_cache lru_cache(maxsizeNone) def count_special_permutations(mask, prev): if mask (1 n) - 1: return 1 total 0 for i in range(n): if not (mask (1 i)) and (prev is None or abs(nums[i] - prev) k): total count_special_permutations(mask | (1 i), nums[i]) return total # 示例计算相邻元素差值不超过k的排列数 nums [1, 4, 7, 10] n len(nums) k 3 print(count_special_permutations(0, None))12.3 位运算优化使用位掩码表示元素使用情况提高状态判断效率def permute_bitmask(nums): n len(nums) total 1 n res [] for mask in range(total): if bin(mask).count(1) n: perm [] for i in range(n): if mask (1 i): perm.append(nums[i]) res.append(perm) return res13. 排列问题的边界情况处理13.1 空输入处理def safe_permute(nums): if not nums: return [[]] # 空列表的唯一排列是空列表本身 return permute(nums)13.2 大数阶乘处理当n较大时n!会非常大可能导致整数溢出from math import factorial, log10 def estimate_permutation_size(n, kNone): if k is None: k n log_size 0 for i in range(n, n-k, -1): log_size log10(i) return int(log_size) 1 # 返回位数13.3 浮点数排列处理浮点数时需要考虑精度问题def float_permute(nums, epsilon1e-9): def is_same(a, b): return abs(a - b) epsilon # 需要先处理重复元素问题 # ...类似之前的去重逻辑但使用is_same比较14. 排列问题的测试验证14.1 单元测试设计import unittest class TestPermutations(unittest.TestCase): def test_empty_input(self): self.assertEqual(permute([]), [[]]) def test_single_element(self): self.assertEqual(permute([1]), [[1]]) def test_no_duplicates(self): result permute([1, 2, 3]) self.assertEqual(len(result), 6) self.assertIn([1, 2, 3], result) self.assertIn([3, 2, 1], result) def test_with_duplicates(self): result permuteUnique([1, 1, 2]) self.assertEqual(len(result), 3) self.assertIn([1, 1, 2], result) self.assertIn([2, 1, 1], result) self.assertNotIn([1, 2, 1], result) # 取决于具体实现14.2 性能测试import timeit def test_performance(): setup from __main__ import permute, permuteUnique\nnums list(range(8)) t1 timeit.timeit(permute(nums), setupsetup, number10) t2 timeit.timeit(permuteUnique(nums), setupsetup, number10) print(f标准排列耗时: {t1:.3f}s) print(f去重排列耗时: {t2:.3f}s)14.3 随机测试import random def random_test(): for _ in range(100): n random.randint(1, 8) nums [random.randint(1, 5) for _ in range(n)] try: p1 permute(nums) p2 list(permutations(nums)) assert len(p1) len(p2) except: print(f测试失败输入: {nums}) raise print(100次随机测试通过)15. 排列问题的扩展阅读15.1 推荐学习资源《算法导论》中的组合数学章节LeetCode排列相关问题全排列全排列 II下一个排列排列序列在线可视化工具VisualGo的排列算法可视化Algorithm Visualizer的递归树展示15.2 相关算法领域组合优化回溯算法动态规划中的排列应用图论中的哈密尔顿路径问题计算几何中的最近邻搜索15.3 进阶研究课题排列的随机采样算法排列编码与解码排列的统计特性分析并行排列生成算法量子计算中的排列问题在实际项目中应用排列算法时我发现最重要的是理解问题本质而不是机械套用算法模板。比如当n较大时直接生成所有排列通常不可行这时就需要考虑启发式方法或剪枝策略。另外处理排列问题时清晰的递归思维和状态管理能力往往比编码技巧更重要。

相关新闻

number  decimal

number decimal

number & decimal 基础术语有理数:rational number 复数:rational numbers 无理数: irrational number 复数:irrational numbers补充相关词汇实数:real number 整数:integer 分数:fraction…

2026/8/11 13:34:05 阅读更多 →
Seedance 2.0 Mini

Seedance 2.0 Mini

[AI] Local Model Video Generation_localai download models automatically api run wan2-CSDN博客 10秒视频,哆啦A猫,变成橙猫

2026/8/11 13:34:05 阅读更多 →
Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题

Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题

Windows苹果驱动缺失终极指南:轻松解决iPhone连接问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mir…

2026/8/11 13:34:05 阅读更多 →

最新新闻

Spring自动扫描机制原理与最佳实践

Spring自动扫描机制原理与最佳实践

1. Spring自动扫描机制深度解析 在Java企业级开发领域,Spring框架的自动扫描功能彻底改变了我们管理对象生命周期的方式。记得2010年我刚接触Spring 2.5时,每个Bean都需要在XML中手动配置,而现在通过ComponentScan注解就能自动完成这一切。这…

2026/8/11 14:16:21 阅读更多 →
MAT工具诊断隐式内存泄漏实战指南

MAT工具诊断隐式内存泄漏实战指南

1. 项目概述:当MAT工具遇上"隐式内存泄漏" 上周凌晨三点,我被一阵急促的电话铃声惊醒。生产环境的核心服务突然OOM崩溃,重启后不到两小时再次崩溃。打开MAT(Memory Analyzer Tool)分析堆转储文件&#xff0c…

2026/8/11 14:16:21 阅读更多 →
PHP安全开发:Session、Cookie与Token实战解析

PHP安全开发:Session、Cookie与Token实战解析

1. PHP安全开发核心要素解析在Web应用安全领域,PHP作为服务端脚本语言的"常青树",其安全机制设计直接影响系统防护能力。Session、Cookie和Token这三大认证载体,构成了PHP后台模块的安全基石。最近帮某金融平台做渗透测试时&#x…

2026/8/11 14:16:21 阅读更多 →
防洪评价全流程技术解析与实战经验分享

防洪评价全流程技术解析与实战经验分享

1. 防洪评价项目概述防洪评价是水利工程前期工作的关键环节,也是我从业十二年来参与最多的项目类型之一。这份技术复盘将系统梳理从资料收集到报告编制的全流程要点,特别针对新手工程师容易踩坑的环节进行深度解析。去年完成的某流域防洪评价项目&#x…

2026/8/11 14:16:21 阅读更多 →
Hardhat智能合约开发:从入门到实战

Hardhat智能合约开发:从入门到实战

1. 为什么选择Hardhat进行智能合约开发与测试 在区块链开发领域,Hardhat已经成为以太坊开发者的事实标准工具链。作为一个亲身经历过Truffle、Remix、Brownie等多个开发框架的老手,我可以明确告诉你Hardhat在以下方面具有显著优势: 本地开发…

2026/8/11 14:16:21 阅读更多 →
本地优先的在线工具站:在浏览器中构建原生级应用体验

本地优先的在线工具站:在浏览器中构建原生级应用体验

BBAB在线工具站 https://bbab.net/tools/ 并非又一个普通的工具站。它更像一场关于“浏览器能做什么”的实践展示。在追求“云端优先”的浪潮中,它逆向而行,将计算重心拉回用户设备,在浏览器这个看似轻量的容器里,构建了一套接近…

2026/8/11 14:15:20 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →