由计算工具解决的很大一部分问题都可以归类为
约束满足问题(CSPs, constraint-satisfaction problems)
。CSP 一般包含三个基本概念:
变量(variables)
、
域(domains)
和
约束条件(constraints)
。
比如需要在星期五为 Joe、Mary、Sue 三个人安排一场会议,要求 Sue 必须和另外的至少一个人同时在场。针对此问题:
Joe、Mary、Sue 三个人即为变量(variables)
每个人(变量)各自空闲的时间点即为对应的域(domains)。比如变量 Mary 在下午 2 点和 3 点的时候有空,这两个时间点即为变量 Mary 对应的域
约束条件(constraints)有两点:Sue 必须在场;除 Sue 以外至少还需要另一人到场
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
from typing import Generic, TypeVar, Dict, List, Optional from abc import ABC, abstractmethod
V = TypeVar('V')
D = TypeVar('D')
class Constraint(Generic[V, D], ABC): def __init__(self, variables: List[V]) -> None: self.variables = variables
@abstractmethod def satisfied(self, assignment: Dict[V, D]) -> bool: pass
|
Classic Computer Science Problems in Python
davecom/ClassicComputerScienceProblemsInPython