- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 48823
- 在线时间
- 小时
|
现在基本上可以认定27是最优解,只是由于计算资源所限,还不能完全确定。
我们记x=114514, y=1919810.
我们的目标是寻找一个y=f(x)的表达式,其中f(x)是关于x的四则混合运算。我们知道f(x)可以表示为一个二叉树,其中最顶层,必然可以写成
u(x) op v(x)的形式。通常u(x)和v(x)中包含x的数目不均匀,不凡设v(x)中含x的数目更少,于是我们通常可以把表达式重写为
y op2 v(x) = u(x), 或者
A(y,x)=u(x)
其中A(y,x)是关于一个y和若干个x的四则混合运算,u(x)是关于若干个x的四则混合运算。
同样对于表达式A(y,x),如果它包含的y和x的数目还是很少,我们可以继续将二叉树u(x)的一个分支转移到A(y,x), 使得两边包含数字数目尽量接近。
实际计算结果表示,相同数目的数字,左边表达式能够产生的值会更多一些。
我们假设集合S(n)为包含一个y和n-1个x进行四则混合运算能够达到但是一个y和更少数目的x的四则混合运算无法达到的集合。
T(n)为n个x进行四则混合运算能够达到,但是更少x的四则混合运算无法达到的集合。
于是T(1)={x}, S(1)={y}
\(T(n)=\cup_{o="+-*/"}\cup_{k=1}^{n-1} T(k) o T(n-k)\)
\(S(n)=\cup_{o="+-*/"}(\cup_{k=1}^{n-1} T(k) o S(n-k) \cup S(k) o T(n-k)) \)
于是如果\(a\in T(u) \cap S(v) \), 我们就可以从T(u)和S(v)中找到能够达到相同值的公共表达式,也就是表明可以使用u+v-1个x表示最终值y。
其中有一个唯一的问题是 \( 0 \in T(2)\), 这会导致\(0 \in S(3)\), 实际上这个对应表达式\(x-x = (x-x)y\),实际上我们并不能从中解出y.
实际上我们很容易判断出一个关于y的最短表达式的计算中间结果是不能出现0的,所以我们可以将所有的0从T(n), S(n)中都删除。
然后我们假设某个表达式
A(y,x)=u(x)
左边包含s个数字,右边包含t个数字,而且s<t,
那么右边的表达式树必然有一个分支含k(不超过t/2)个数字,我们可以通过将这个分支挪到左边,变成左边s+k个数字,右边t-k个数字。
我们现在的目标是需要穷举所有包含一个y和不超过26个x的表达式, 所以这是\(s+t<=27\)
如果其中\(t>=20\),那么\(s<=7\), 我们必然可以将\(\lfloor \frac t2\rfloor\)个字母转移到左边,使得左边字母数目不大于\(s+\lfloor \frac {27-s}2\rfloor\le \lfloor \frac {27+s}2\le 17\rfloor\)
由此可见,只要我们能够穷举\(s\le 17, t\le 19\)的所有组合都没有找到包含一个y和不超过26个x的等式,那么就可以证明27个x是最优表达式。
唯一的问题是如下表,其中各行中c1,c2分别代表T(i)和S(i)中非零元素数目,特别S(i)的数目增长很快,会导致内存快速不够用。
i=2: c1=3,c2=5
i=3: c1=10,c2=25
i=4: c1=35,c2=128
i=5: c1=129,c2=643
i=6: c1=485,c2=3205
i=7: c1=1902,c2=15809
i=8: c1=7651,c2=78118
i=9: c1=31672,c2=387093
i=10: c1=134239,c2=1923118
i=11: c1=581178,c2=9582147
i=12: c1=2562995,c2=47893936
为此,我先做了一个限定,只保留T(i)和S(i)中分子和分母都不超过\(8*10^{15}\)的数字(计算中间结果也需要满足这个条件),在这个约束下,我们得到
i=2: c1=3,c2=5
i=3: c1=10,c2=24
i=4: c1=34,c2=114
i=5: c1=121,c2=526
i=6: c1=430,c2=2273
i=7: c1=1530,c2=9185
i=8: c1=5276,c2=36151
i=9: c1=17743,c2=137627
i=10: c1=59097,c2=504415
i=11: c1=192625,c2=1797383
i=12: c1=604914,c2=6203005
i=13: c1=1874928,c2=20806957
i=14: c1=5672229,c2=68007584
i=15: c1=16838363,c2=216890645
i=16: c1=49039574,c2=676209817
i=17: c1=140476738,c2=2064943566
i=18: c1=396407732,c2=0
i=19: c1=1102177249,c2=0
其中S(18)和S(19)没有计算,而不是它们数目为0.
然后在此限定之下,的的确确验证了27个x已经是最优的了,比如
Found best 27=14+14
match 40417
40417=R=383962-343545(7,7)
383962=R=1919810/5(1,6)
5==572570/114514(1,5)
572570==114514--458056(1,4)
458056==114514--343542(1,3)
343542==114514--229028(1,2)
229028==114514--114514(1,1)
343545==114514--229031(1,6)
229031==114514--114517(1,5)
114517==114514--3(1,4)
3==343542/114514(1,3)
343542==114514--229028(1,2)
229028==114514--114514(1,1)
40417==114514/114514/40417(1,13)
114514/40417==114514-4628197824/40417(1,12)
4628197824/40417==13113227168/687089/6(4,8)
13113227168==13113341682-114514(1,3)
13113341682==13113456196-114514(1,2)
13113456196==114514*114514(1,1)
687089/6==114514--5/6(1,7)
5/6==1/2--1/3(3,4)
1/2==114514/229028(1,2)
229028==114514--114514(1,1)
1/3==114514/343542(1,3)
343542==114514--229028(1,2)
229028==114514--114514(1,1)
比如上面40417=R=383962-343545(7,7)中=R=代表右边会使用一个数字y
而13113227168==13113341682-114514(1,3)中==代表右边仅使用数字x.
|
评分
-
查看全部评分
|