用什么样一种数据结构来保存这样的逻辑关系?
比如输入条件是:
b>a,c>a,
假如这样保存
if(b>a)
把每个数赋值一个具体的数
b=2,a=1;
if(c>a)
c=a+1;
即c=2;
if(b==c) //即b==2,c==2
输出b与c大小不确定.
else
b与c大小确定
输出
但这样做的问题是
如果条件是 c>b>a, e>d>a
设a=1那么
b=2,c=3
d=2,e=3
如果按照相等来判断的话
判断方法:
if(c==e)
print("c与e关系不确定")
else
print("c与e关系能确定")
但 这样的话b和e的关系也能确定,因为b!=e,
可实际上b和e的关系不能确定
如果不赋值具体的数,用集合来表示:
输入:b>a,c>a
设置a=100,
b=[101,无穷大]
c=[101,无穷大]
输入增加 d>b 即变为:d>b>a,c>a
给d赋值:
d=[b[0]+1,无穷大]即d=[102,无穷大]
这样判断d是否大于a只需判断d[0]是否大于a[0]即可,就是集合的利用包含关系来判断
如果此时输入
e>c 即变为:d>b>a,e>c>a
给e赋值:
e就应该是[c[0]+1,无穷大]
即:e= [102,无穷大]
e与d的集合一样,说明e与d不确定
如果增加了一个f>e 即:d>b>a,f>e>c>a
为f赋值就应该是: f=[c[0]+1,无穷大] 即[103,无穷大]
f=[103,无穷大] 而d=[102,无穷大] f[0]>d[0],f比d大! 实际上f与d的关系不确定!这就矛盾了
问题很明显,没有考虑这个集合上限,导致和赋值个具体数的方法没区别
如果这样改进 ,加一个集合上限给它呢?:
条件 :b>a,c>a
设 a=100,
int x=某个具体的数
b=[101,x]
c=[101,x]
这样保存
如果此时输入:
d>b 即d>b>a,c>a
如果设置 d=[x+1,x*2] 即d的每个数都比b大,
实际上这样也是有问题 的,
某个具体的数x 怎么确定? 随便设置一个?比如10000,只要是一个确定的数,这样肯定还是有bug的
这些bug很容易想到这里就暂时不写了.
那么到底怎么用计算机语言保存这样的一种逻辑关系呢?