python:Backtracking Algorithm
项目结构# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 22:59 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : bead.py from dataclasses import dataclass dataclass(frozenFalse) class BeadItem: 多宝手串珠子实体 bead_id: str name: str material: str color_group: str # red/green/purple/gold unit_price: float stock: int # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:00 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : jewelry.py from dataclasses import dataclass dataclass(frozenFalse) class JewelryItem: 成套首饰商品实体 sku_id: str name: str category: str # necklace / earring / bracelet / ring material: str # Au999 / 18K / S925 color: str style: str price: float stock: int has_gem: bool # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:01 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : base_rule.py from abc import ABC, abstractmethod from typing import Any, List class BaseRule(ABC): 约束规则抽象基类 abstractmethod def check(self, item: Any, path: List[Any], **kwargs) - bool: 校验单个候选物料是否满足规则 :param item: 当前待选物料 :param path: 当前已选中集合 pass # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:01 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : bracelet_rule.py from typing import Dict, List from .base_rule import BaseRule from Backtracking.dto import BeadItem class BraceletRule(BaseRule): 手串搭配约束规则 def __init__(self, max_single_color: int 4): self.max_single_color max_single_color def check(self, item: BeadItem, path: List[BeadItem], **kwargs) - bool: :param item: :param path: :param kwargs: :return: # 1. 库存校验 used_count path.count(item) if used_count item.stock: return False # 2. 色系均衡约束 color_cnt: Dict[str, int] {} for b in path: color_cnt[b.color_group] color_cnt.get(b.color_group, 0) 1 if color_cnt.get(item.color_group, 0) self.max_single_color: return False return True # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:04 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : scene_jewelry_rule.py from typing import Dict, List, Set from .base_rule import BaseRule from Backtracking.dto import JewelryItem class SceneJewelryRule(BaseRule): 场景化成套首饰约束规则 def __init__(self, scene_config: Dict): self.scene_config scene_config def check(self, item: JewelryItem, path: List[JewelryItem], **kwargs) - bool: allow_material: Set self.scene_config[allow_material] must_gem: bool self.scene_config[must_gem] # 库存 if item.stock 0: return False # 材质限制 if item.material not in allow_material: return False # 是否必须带宝石 if must_gem and not item.has_gem: return False return True staticmethod def get_scene_config(scene_type: str) - Dict: 场景配置中心新增场景只在这里扩展 :param scene_type: :return: scene_map { wedding: { allow_material: {Au999, 18K}, must_gem: True }, commute: { allow_material: {Au999, S925, 18K}, must_gem: False }, dinner: { allow_material: {18K}, must_gem: True } } return scene_map.get(scene_type, scene_map[commute]) # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:05 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : score_util.py from Backtracking.dto import BeadItem, JewelryItem def score_bracelet_scheme(scheme: list[BeadItem]) - float: 手串方案评分色系多样性优先 :param scheme: :return: color_set {b.color_group for b in scheme} diversity len(color_set) total_cost sum(b.unit_price for b in scheme) return diversity * 10 - total_cost / 200 def score_jewelry_scheme(scheme: list[JewelryItem]) - float: 成套首饰方案评分 :param scheme: :return: gem_cnt sum(1 for i in scheme if i.has_gem) stock_score sum(min(i.stock, 5) for i in scheme) return gem_cnt * 5 stock_score # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:07 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : backtrack_bracelet.py from typing import List from Backtracking.dto import BeadItem from Backtracking.rule.bracelet_rule import BraceletRule class BraceletBackTracker: def __init__(self, bead_pool: List[BeadItem], rule: BraceletRule): self.bead_pool bead_pool self.rule rule self.solutions: List[List[BeadItem]] [] def backtrack(self, path: List[BeadItem], remain: int, total_cost: float, budget: float): :param path: :param remain: :param total_cost: :param budget: :return: if remain 0: self.solutions.append(path.copy()) return if total_cost budget: return for bead in self.bead_pool: if not self.rule.check(bead, path): continue path.append(bead) self.backtrack(path, remain - 1, total_cost bead.unit_price, budget) path.pop() def run(self, target_count: int, budget: float) - List[List[BeadItem]]: :param target_count: :param budget: :return: self.solutions.clear() self.backtrack([], target_count, 0.0, budget) return self.solutions # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:08 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : backtrack_jewelry.py from typing import List, Set from Backtracking.dto import JewelryItem from Backtracking.rule.scene_jewelry_rule import SceneJewelryRule class JewelrySceneBackTracker: def __init__(self, goods_pool: List[JewelryItem], rule: SceneJewelryRule): self.goods_pool goods_pool self.rule rule self.solutions: List[List[JewelryItem]] [] def backtrack( self, start_idx: int, selected: List[JewelryItem], total_price: float, budget: float, target_categories: Set[str] ): :param start_idx: :param selected: :param total_price: :param budget: :param target_categories: :return: selected_cats {x.category for x in selected} if selected_cats target_categories: self.solutions.append(selected.copy()) return if total_price budget: return for i in range(start_idx, len(self.goods_pool)): item self.goods_pool[i] if item.category in selected_cats: continue if not self.rule.check(item, selected): continue selected.append(item) self.backtrack(i 1, selected, total_price item.price, budget, target_categories) selected.pop() def run(self, budget: float, target_categories: Set[str]) - List[List[JewelryItem]]: :param budget: :param target_categories: :return: self.solutions.clear() self.backtrack(0, [], 0.0, budget, target_categories) return self.solutions # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:09 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : bracelet_service.py from typing import List from Backtracking.dto import BeadItem from Backtracking.core import BraceletBackTracker from Backtracking.rule.bracelet_rule import BraceletRule from Backtracking.common import score_bracelet_scheme class BraceletMatchService: 手串搭配业务服务层封装算法调用、排序、截断 def __init__(self, bead_pool: List[BeadItem]): self.bead_pool bead_pool def match( self, target_count: int, budget: float, max_color_limit: int 4, top_n: int 6 ) - List[List[BeadItem]]: :param target_count: :param budget: :param max_color_limit: :param top_n: :return: rule BraceletRule(max_single_colormax_color_limit) tracker BraceletBackTracker(self.bead_pool, rule) schemes tracker.run(target_count, budget) # 业务后处理打分排序只返回TopN schemes.sort(keyscore_bracelet_scheme, reverseTrue) return schemes[:top_n] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:10 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : jewelry_scene_service.py from typing import List, Set from Backtracking.dto import JewelryItem from Backtracking.core import JewelrySceneBackTracker from Backtracking.rule.scene_jewelry_rule import SceneJewelryRule from Backtracking.common import score_jewelry_scheme class JewelrySceneMatchService: 场景成套首饰业务服务 def __init__(self, goods_pool: List[JewelryItem]): self.goods_pool goods_pool def match_by_scene( self, scene: str, budget: float, target_categories: Set[str], top_n: int 8 ) - List[List[JewelryItem]]: :param scene: :param budget: :param target_categories: :param top_n: :return: scene_conf SceneJewelryRule.get_scene_config(scene) rule SceneJewelryRule(scene_conf) tracker JewelrySceneBackTracker(self.goods_pool, rule) schemes tracker.run(budget, target_categories) schemes.sort(keyscore_jewelry_scheme, reverseTrue) return schemes[:top_n]调用# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 # 描述Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2024.3.6 python 3.11 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/22 23:12 # User : geovindu # Product : PyCharm # Project : PyAlgorithms # File : BacktrackingBll.py from Backtracking.dto import BeadItem, JewelryItem from Backtracking.service import BraceletMatchService, JewelrySceneMatchService class BacktrackingBll(object): def test_bracelet_match(self): :return: bead_pool [ BeadItem(B01, 南红圆珠, 南红, red, 168, 4), BeadItem(B02, 和田玉圆珠, 和田玉, green, 198, 5), BeadItem(B03, 紫水晶, 紫水晶, purple, 128, 4), BeadItem(B04, 足金隔珠, 足金, gold, 320, 3), ] svc BraceletMatchService(bead_pool) result svc.match(target_count8, budget2000) print( 多宝手串搭配方案 ) for idx, scheme in enumerate(result, 1): total sum(b.unit_price for b in scheme) names [b.name for b in scheme] print(f方案{idx} 总价:{total:.2f} 珠子:{names}) def test_jewelry_scene_match(self): :return: goods_pool [ JewelryItem(N001, 碎钻项链, necklace, 18K, white, luxury, 3299, 12, True), JewelryItem(N003, 素金项链, necklace, Au999, yellow, minimalist, 2199, 9, False), JewelryItem(E001, 白钻耳饰, earring, 18K, white, luxury, 2199, 15, True), JewelryItem(E003, 素金耳饰, earring, Au999, yellow, minimalist, 1399, 11, False), ] svc JewelrySceneMatchService(goods_pool) target_cats {necklace, earring} print(\n 婚嫁场景 ) wedding svc.match_by_scene(wedding, budget8000, target_categoriestarget_cats) for item_set in wedding: print([x.name for x in item_set], 总价, sum(x.price for x in item_set)) print(\n 通勤场景 ) commute svc.match_by_scene(commute, budget5000, target_categoriestarget_cats) for item_set in commute: print([x.name for x in item_set], 总价, sum(x.price for x in item_set)) def Demo(self): :return: self.test_bracelet_match() self.test_jewelry_scene_match()输出

相关新闻

YOLO算法在垃圾分类检测中的实践与优化

YOLO算法在垃圾分类检测中的实践与优化

1. 项目概述:当YOLO遇上垃圾分类去年在深圳某科技园区实地部署垃圾分类检测系统时,我亲眼见证了一个误识别案例:系统将员工手中的星巴克纸杯错误归类为"有害垃圾",导致后续分拣流程混乱。这个看似微小的错误背后&#x…

2026/7/23 1:36:46阅读更多 →
AI大模型开发环境配置与API调用实战指南

AI大模型开发环境配置与API调用实战指南

1. 项目概述:AI大模型入门实战指南作为一名在AI领域摸爬滚打多年的从业者,我深知新手在接触大模型时最容易在环境配置和API调用环节踩坑。这篇指南将带你从零开始,用最稳妥的方式搭建开发环境并调用主流大模型API,过程中所有可能遇…

2026/7/23 1:36:46阅读更多 →
2026年AI论文降重工具评测与学术规范指南

2026年AI论文降重工具评测与学术规范指南

1. 论文降重工具的现状与挑战2026年的学术环境对论文原创性提出了前所未有的严格要求。各大高校和期刊普遍采用AI驱动的查重系统,检测精度达到99.7%,连改写后的同义替换都能识别。在这种背景下,传统的"复制粘贴同义词替换"式降重方…

2026/7/23 1:36:46阅读更多 →
阿里Qwen-Audio-3.0-TTS-Plus API集成实战:从认证到生产部署

阿里Qwen-Audio-3.0-TTS-Plus API集成实战:从认证到生产部署

在语音合成技术领域,阿里最新发布的 Qwen-Audio-3.0-TTS-Plus 模型在多个权威评测中表现突出,特别是在自然度和情感表达方面达到了新的高度。对于需要将文本内容转化为语音的开发者而言,无论是构建有声内容平台、智能语音助手还是无障碍阅读应…

2026/7/23 2:56:58阅读更多 →
怎么证明 Rerank 真的有用?nDCG、P95 延迟与冻结测试集

怎么证明 Rerank 真的有用?nDCG、P95 延迟与冻结测试集

怎么证明 Rerank 真的有用?nDCG、P95 延迟与冻结测试集 结论先放前面:证明一个检索策略有效,不能靠"挑几条 query 看效果",而要靠三件事:分级相关性指标(nDCG)、尾部延迟(…

2026/7/23 2:56:58阅读更多 →
AI 软件简报 07.18-07.22 大模型定价 ,MCP协议,投资

AI 软件简报 07.18-07.22 大模型定价 ,MCP协议,投资

每期覆盖 3-4 天的 AI 软件动态。个人视角,不追求面面俱到。周三、六更新。这四天(7.19-7.22)的 AI 软件圈,表面看是三件事:模型继续发、融资继续烧、协议继续改。但我想聊的是水面下那条更值得注意的线——AI 基础设施…

2026/7/23 2:56:58阅读更多 →
北京一网天行 智慧矿山物联网平台开发 巷道支护一体化设计软件定制

北京一网天行 智慧矿山物联网平台开发 巷道支护一体化设计软件定制

北京一网天行科技是一家从事软件定制开发13年的高新技术企业,除了APP、小程序之外,智慧矿山、工矿工程类软件的研发我们也有丰富的经验,我们拥有《智慧矿山物联网平台》等多款矿山相关的软件著作权,已经落地了700多个行业的定制系…

2026/7/23 2:56:58阅读更多 →
后量子密码学(PQC)在 STM32 上的探索(二):从 ML-KEM-512 到 Kyber512 的移植与性能实测

后量子密码学(PQC)在 STM32 上的探索(二):从 ML-KEM-512 到 Kyber512 的移植与性能实测

1. 为什么要做这个实验? 在上一篇文章中,我们在 STM32F103 上完成了 mbedTLS 的移植,验证了 SHA256 哈希算法的正确性。那是传统密码学的基础验证。 本篇文章的目标是:把 NIST 标准化的后量子密码算法真正跑在 STM32F103 上&…

2026/7/23 2:56:58阅读更多 →
Ray 2.55正式支持Google Cloud TPU:Kubernetes上的分布式AI计算实践

Ray 2.55正式支持Google Cloud TPU:Kubernetes上的分布式AI计算实践

如果你正在构建需要大规模计算资源的AI应用,比如训练大语言模型或运行复杂的多智能体系统,那么最近Ray 2.55的更新绝对值得你关注。这次更新最核心的亮点是正式支持Google Cloud TPU,这意味着你可以通过KubeRay在Kubernetes集群中自动编排和管…

2026/7/23 2:54:58阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →