记匹配问题的通用解法

以a、b、c对应x、y、z为例,求满足a!=x,c!=x,z的对应组合
代码如下:

for i in range(ord('x'),ord('z') + 1):
    for j in range(ord('x'),ord('z') + 1):
        if i != j:
            for k in range(ord('x'),ord('z') + 1):
                if (i != k) and (j != k):
                    if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
                        print 'order is a -- %s\t b -- %s\tc--%s' % (chr(i),chr(j),chr(k))

求满足限制条件下的解一般是使用遍历。
具体解决思路是:
为a b c与x y z找中间值,如“i j k”,使它们满足
1 x y z与i j k有一定的对应关系,比如这里是xyz与ijk 有隐式的一一对应,这个对应关系没有写出,但是写程序的时候默认i对应的就是x、j对应的就是y
2 i j k经过一定条件的映射,得到a b c,即
f(i) = a,
f(j) = b,
f(k)= c
然后f^(-1)(a) = i…
有时候会出现映射两次,即h(f(i)) = a或者说f(i)=h(a)
但总的来说思路是一样的—为某两组值找对应关系,就是找到两边某个值存在的对应关系
比如这里,中间值, i j k∈{ord(x),ord(y),ord(z)}

所以总的来说,对照着这段思路,这个问题的解决就是
a b c隐式对应这i j k,i j k取ord(x),ord(y),ord(z)的值满足条件,
从而a b c–>i j k—>x y z。

PS:
对限制条件的处理有两种;
一是在循环头上进行限制,y’ =f(x’)
二是在循环结果上进行筛选,y’ = (y)’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值