Google Code Jam 2009 (Practise)

去年做了做Google Code Jam的入围题,挺好玩的。今年早早的就收到了邮件,并且还附上了四道练习题。

1. [74%/80%] Alien Number:给定源语言以及目标语言,要求翻译一个数字。

这题按最自然的思路就行了。为方便起见,把源数字先转换成十进制,然后再用和十进制转二进制相同的辗转相除法,求得目标数字的表示。

2. [80%/84%] Always Turn Left:给定总是左转的规则及实际路线,要求实际的迷宫。

如果你身陷迷宫,“总是左转”的规则,或者说“手不离墙,摸着墙走”的规则,兴许能救你一命。

其实,这道题中,我们能得到的所有讯息,都在来回走的路径里面。所以只要跟着路径实际来回走一遍,并沿路,总结迷宫信息,最后得到的便是整个迷宫。

对于左右转及方向的表示,一堆if-else,时空都坏;归纳到一个表里面查表,空间效率也不高;其实就四个方向,如果NESW分别表示为0123的话,简单的加减取模,就能实现左右转了。至于walk through的坐标处理,选择一个简单的闭包最为理想。

另外,在处理路径的时候,维护一个x、y坐标的最大、最小值,以便于最后输出迷宫。

在输出迷宫的时候,不用先存储那张转换表,而直接把YES当成1,NO当成0,作为4位的二进制数,再表示为16进制,刚好就是那张表。

==== 从题目前括号里表示的人们的成功率上来看,前两题比较简单,后两题比较困难 ====

3. [68%/49%] Egg Drop:给定某个可解扔蛋问题的三个参量,在保持可解的情况下,求每个参量的极大值或极小值

这道题有很自然的思路,那便是Fmax的递推式:

设想现在在第 i 层扔蛋,那么第 i 层扔了,就能确定状态,因此本身算一层 ( 1 );
如果蛋没碎,往上验,最多还能验F( D – 1, B )层[ 因为第 i 层扔了一次,D减1;蛋没碎,B不变 ];
如果蛋碎了,往下验,最多还能验F( D – 1, B – 1 )层[ 因为第 i 层扔了一次,D减1;蛋碎了,B也减1 ]。

由于每次验证,蛋只能处于碎或不碎状态中的一种,所以二者并不互相影响。故:

F(D, B) = 1 + F( D – 1, B ) + F( D – 1, B – 1 )

接下来如何计算这个递推式,是个问题。如果这个问题解决了,那么要找到最小的D和B,直接查表既可。

容易看出,递推式中有大量重复的子问题,动态规划应该效果不错。不过,我们还是先来看看数据膨胀速度如何:

[B]
1 3 7 15
1 3 7 14
1 3 6 10
1 2 3 4   [D]

左上部分不用计算,就是对角线上的数字,因为能打碎的数量,如果超过总的实验次数,多出来的这部分就没意义了。故:

F( D, B ) = F( D, D ) if( B > D )

直接观察对角线上的数字,容易看出,对角线上的数字为 2^D – 1。

即使没有看出来,也可以推出来。只用由F(D, B)的递推式和上面B>D的性质,得出递推式 A(n)=2A(n-1)+1,并求解既可。

由此可见,这张表的数字膨胀速度相当快(2^n)。因此,我们得充分利用一个很不起眼的条件,那便是F有2^32的大小限制。

B再大,在应用上面B>D的性质后,也不会超过32。整张表的纵向高度就限制得很小了。

但整张表的横向高度依然可以很大,比如F( 2000000000, 1 ),这种情况即使动态规划会很吃苦头。

观察每一列,都是从 D ~ (2 ^ D – 1),之间的每个数的差值,刚好是杨辉三角。

1—————–0
1          1————-1
1          2       1———–2
1        3         3        1——-3
1        4         6        4        1—-4
0Cr4 1Cr4 2Cr4 3Cr4 4Cr4

15 – 1 = 14
14 – 4 = 10
10 – 6 = 4

所以,从D开始往上累加各个组合数,既可得出某一位的值。而这个累加过程,一旦大于2 ^ 32便可退出。

算出了Fmax,Bmin可以直接挨个找,因为表的纵向高度有限。而Dmin,则需要一个简单的折半查找,以应对F( 2000000000, 1 )类似的情况。

4. [64%/31%] Shopping Plan:给定商店、油费和要买的东西,求最低花费

31%的大数据集通过率,可见这道题的时间或者空间复杂度比较高。

这道题乍看之下,容易让人想起Dijkstra算法[王选貌似还谈论过Dijkstra这个人]。但我很难想到简单的一个数,来指征当前选择的优劣。因为要考虑的因素,实在很多,离家的远近、当前购买物的价格、路径、还有买了是否需要立刻回家等等。

另外,最优子结构的寻找,也颇为困难。因为容易理解,买abcd的最佳路径不一定包括买abc的最优路径。

在这种情况下,我们不得不增强条件。我们以a. 从某个商店出发,b. 买完某些商品,c. 并且当前是否需要回家为基准计算最小值。

这里面依然可以看出,有大量的重复子问题,可以动态规划。

我们遍历当前商店里能买到的并且当前需要购买的商品,买之,然后再遍历所有商店作为下一个商店,并且考虑当前买的商品是否需要立刻放回家。如果已经买完了,则立刻回家。

这里有一个想法很诱惑,那便是走过的商店便不需要再走。因为非perishable的商品始终能顺带带走,perishable的商品始终要立刻回家,也不需要第二次光顾来买。所以,如果以空间换时间,在过程中排除掉某些商店,效果应该不错。但再仔细想想就会发现,这里的空间开销很大,即使用bit set,也需要2 ^50。而所换来的时间并不多,因为我们依然得处理这个比特集。

这样实现的一个perl脚本的性能如下:

[小数据集 100 cases] – 工作很好

real  0m0.297s
user 0m0.260s
sys  0m0.040s

[大数据集 20 cases] – 严重超时

real   35m4.110s
user  34m20.661s
sys    0m42.387s

0.297s已经是对perl脚本做性能调校之后的结果,所以不更改算法或者更改编程语言,很难有所提高了。这里我选择了后面一种方式,用纯C实现了一个相同的算法:

由于perl处理文本始终还是方便很多,所以先用preprocess.pl脚本把input文本解析为利于C解析的格式。[这里是每行一个数字,并处理掉商品名称]

然后用纯C的程序读入处理后的文本,并输出,[ $gcc –O3 run.c –lm ]下面是一些性能数据:

[小数据集 100 cases]

real    0m0.223s
user   0m0.220s
sys    0m0.004s

完全没有缓存的版本,已然比perl的要好,接下来为算路费的函数添加缓存:

real    0m0.128s
user   0m0.124s
sys    0m0.004s

再为递归函数添加缓存:

real    0m0.004s
user   0m0.004s
sys    0m0.000s

这里就已经相当理想了,可以预见大数据集性能也不会差。

[大数据集 20 cases]

real    0m16.551s
user   0m16.501s
sys    0m0.048s

16s,算是很完美的性能了。同样的算法,动态脚本和纯C还是没法比啊,呵呵。即使在极限情况,50个商店,15个待购商品的case,也能在0m12.260s内解决。

GCJ 2009 Practise Solution Download

上班族理财

关于理财的问题,首先就要搞清楚为什么要理财。

众所周知,有一句话已经被说烂了,那就是“你不理财,财不理你”。特别是当“理财”二字,放在其实没多少“财”可“理”的人身上,再配上这句话,实在讽刺味十足。

那么,上班族需要理财么?上班族是不愿变成“月光族”,才被迫理财么?其实,换个角度看,答案也不尽然。

上班族理财的侧重点,与富豪们理财,当然应该有所不同。因为上班族应该“理”的不是“财”本身。换句话说,不是整天考虑“钱生钱”的问题;而是应该侧重在“花钱”上,侧重在对“欲望”的把持。所以,“管出不管进”是个很好的选择。

 

下面先来说说繁复版的理财要做哪些工作(不要被吓到,这种方式对上班族,基本没有可行性):[按月为单位]

1. 先做计划的部分 – “收支计划”(注意,这只是计划,可能和实际情况有所出入):

写清楚所有的预计收入。比如:工资收入,房租收入(如果你是地主的话),商务收入(如果您在开淘宝店的话)等等;

写清楚所有的预计支出。比如:每月的吃穿住行费用,水、电、气费(如果你自己住的话),通信费,娱乐费用等等;

2. 再做现有实际情况的部分 – “平衡表”(Balance Sheet):

写清楚所有的资产。比如:房,车,保险,现金帐户,存款帐户等等;

写清楚所有的负债。比如:房债,车债,助学金等等;

3. 虽然也属于现有实际情况的部分,但现金流确实很特殊,即使资产再多,现金流断了也是很让人头痛的一件事情 – “现金”

写清楚所有的日常支付手段。比如:兜里的钱,信用卡,借记卡,电子钱包(比如:淘宝帐户,paypal帐户等)等等;

4. 最后做将来的部分 – “实际交易”(Transaction):

每天记录实际收入,并把收入转入(Transfer)各个“现金”帐户,以备实际支付。

每天记录实际支出,并记录清楚各项信息,以及从何处实际支付。

5. 月底的时候总结 – “生成报表”(Report):

只要有详细的记录,生成报表有太多的软件可以做这件事情。

 

那么,对于没有多少“资产”,却可能有很多负债的“上班族”,应该怎样简化这个过程呢?

从上面的繁复版,可以注意到,我们花费了大量的精力,去记录我们的每笔资产是如何来,如何在内部流转,如何出去。所有这些信息,在最后生成报表的时候,当然都是有用的,但这样做一来太累,二来没有多大实际意义。所以我们将重心放在钱如何“出去”上,而省略掉钱“如何进来”与“内部周转”。

[注意]

这里并不是说钱“如何进来”和“内部周转”不重要:

首先,钱“如何进来”当然是最重要的事情,但对于不依赖“钱生钱”的上班族而言,总结分析这点意义不大。对上班族而言,就是想方设法赚钱就行了,不用依赖“理财”来使这部分有所提高。

其次,钱如何“内部周转”也很重要,对于上班族而言,保持“现金流”充裕、“鸡蛋不放在一个篮子里”,依然有非常现实的意义。但还是那个问题,分析如何“内部周转”,比如周转周期、频率,周转方式以及资产使用效率等等,更主要还是针对“钱生钱”而言,有更大的指导意义。

好了,最后就说说精简版的上班族理财方式:

 

1. 预算(Budget) – 计划的部分是任何“管理”工作都免不了的:

只关注预计支出。和上面相同,预算清楚每月的吃、穿、住、行、水电气、通信费(网络,手机等)、娱乐费、健身费等等。

也许你第一次列不齐全,这没关系,在第一个月的实践中,发现遗漏的,再添上就行了。

其实预算并没有乍看之下那么困难,一般就是大约估计一下,然后留点buffer就行了。

比如“吃”,早中晚每顿给10元的预算,那么一天就是30,一个月就是900,给点buffer,预算给1000(或者考虑周末在家,600,给点buffer,预算给700)。诸如请客吃饭啥的,那就归在娱乐费里面。

娱乐费、“穿”、“住”、“行”费等等,就更简单了,直接按月估计就行了。而且花了娱乐费,那顿的饭钱10元也就省下来了,这也就意味着,某一顿吃个20元,最后也不会超预算。

[注意]

预算完成后,大概算个总数。由于没有记录钱“如何进来”,所以,大概和自己现在的工资比较一下,看看是否合理,如果预算太高,那就不得不紧缩预算了。这里最关键的一点是,发现预算高了,紧缩预算的时候,一定不要直接压缩buffer。事实会告诉你,这是完全自欺欺人的作法。

[示例](所有数据纯属虚构)

“娱乐” 1000.00

“出行” 500.00

“总计” 6320.00

 

2. 记账(Transaction) – 记录实际情况,这也是日后躬身自省的凭据:

记账想来很繁复,其实也没有想象中困难。每天花不到5分钟足以,而且只要一个记账本,这个工作几乎可以在任何地方进行。

为何简单,因为项数少,读者可以仔细想想一天究竟能有几笔支出。

[示例](所有数据纯属虚构)[只有两项为必须项]

2009-08-11

金额 – 122.50

预算分类 – “娱乐”“餐饮”

商家 – 南府涟漪[这项自然可有可无,有的话,你可以总结出每个月在这家消费了多少]

备注 – XXX君,YYY君(这里表示和谁一起吃饭)[这项自然更是可有可无]

金额 – 2.00

预算分类 – “出行”“公交”

商家 – 501

备注 –无

另外还得计算一下,每项预算一级分类的余额,以给本月剩下的日子提供指导。

[示例](所有数据纯属虚构)

2009-08-11

“娱乐” 超支 342.50

“出行” 剩余 74.00

 

3. 总结(Report) – 躬身自省,调整预算:

总结是很简单机械重复劳动的工作。这里当然就是比对预算与实际支出,哪些没到,哪些超了,找出原因。

有理则为下月调整预算,无理则自罚俯卧撑五百个(kidding :D)

[示例](所有数据纯属虚构)

2009-08

“娱乐” 超支 620.50

“出行” 剩余 20.00

[注意]

由于没有记录“内部周转”,所以把握“现金流”是必须记在心里的一件事情。比如外出吃饭或购物,能用信用卡就尽量用信用卡,不仅能够帮助你记账(每笔交易都有记录),而且能帮你的借记卡尽量维持充裕的现金流,以备不时之需。

理财过后,希望能够每月有所结余,结余出来的这笔钱,如何处理,那是另外一个话题。基本的“房产”、“保险”、“定投”、“国债”等等方式,还是得自己记在心里,

总之,“只管出”的理财方式,对于上班族而言,有较强的可操作性。而且也是每个人,“修养身性”所应该做的事情。“凡事从俭,无欲则刚”,寥与诸君共勉。

[记住]

1 – 2 – 3 预算 – 记账 – 总结

[题后]

当然,作为IT青年,实际上这些事情自然得有程序辅助。iPhone的app store上就有现成的,$1.99 iXpenselt,很是好用。

但即使没有,一个记账小本和一颗持之以恒的心,也足以搞定了。

民主是一个过程

民主是正确的事,民主是当前普适的真理,民主是人民的渴望。然而民主是一个过程,民主不是一蹴而就的事。

民主也有民主的代价与付出。民主始终是上层建筑,而由经济基础所决定。民主是人吃饱饭,穿暖衣之后的二次诉求。

民主虽然是个过程,但随着技术的进步,经济基础的发展,民主却也是个必然的结果。

我们发出的任何声音,都将成为推动历史前行力量的某个分量。

但在任何一个时刻,我们需要在了解历史,追求真理的同时,搞清楚我们在要求什么,我们当前需要什么,搞清楚民主是一个过程,而不仅仅是一个结果或者终点。

Oh…Twitter

云南真是避暑胜地,闭关一周安安静静看看书,其实也挺不错的。

言归正传,一直以来因为公司提供了很多VPN,所以也没有特别关注翻墙的问题。但今天突然发现博客首页的flash twitter插件没法用了。所以干脆就直接换成javascript的,然后开始翻墙。

翻墙基本原理是拿我这台博客服务器做代理,php不太熟,其间还google了一下“php if statement”:

http://blog.axqd.net/wp-content/themes/emplode/axqd.php?callback=TWTR.Widget.receiveCallback&count=50&since_id=2769255170&clientsource=TWITTERINC_WIDGET

<?php
if( $_GET[ ‘since_id’ ] && preg_match( ‘/^[0-9]+$/’, $_GET[ ‘since_id’ ] ) )
  echo file_get_contents("http://twitter.com/statuses/user_timeline/axqd.json?callback=TWTR.Widget.receiveCallback&count=50&clientsource=TWITTERINC_WIDGET&since_id=".$_GET[ ‘since_id’ ]);
else
  echo file_get_contents("http://twitter.com/statuses/user_timeline/axqd.json?callback=TWTR.Widget.receiveCallback&count=50&clientsource=TWITTERINC_WIDGET");
?>

搞定之后,可以选择自己处理这个json对象。不过既然已经有现成的,为什么不用呢?于是比照博客皮肤,在twitter官方配色了一个JS版本的client。

接下来转换资源地址有点麻烦:

先啃容易的骨头,VPN出去,下载相应的静态资源,比如style sheet,js file,还有几个png、gif啥的,然后修改其中一些资源里面的引用地址,再通通一股脑传到服务器上。

接下来改js文件,可惜的是,这个js文件是混淆过的,也不太知道怎么还原。好在混淆器大多像下面这样,在后面搞得像是符号表似的:

‘||||this|function|return||if|var||||||||||||||||||||||||||||||||||||||twtr|false|div|id|else|true|tweet||user|class|net|http|call|results…’

我试着替换其中某些字符串,在本地多尝试几遍,居然找到一个可用的替换。

当然这种方式也有不太爽的地方,细心的你会发现到twitter.com的链接全都被换成了blog.axqd.net。:P

不过反正放这个插件的目的在于展示,而不在于收集reply,所以也就懒得处理这个问题了,呵呵。

题记:既然称“乱”,那行文也稍稍意识流一点得了。想到哪儿,写到哪儿。:D

工作以后,写blog真是件很难坚持的事情。要不是最近又收到了账单,我已经彻底忘了自己还有一个blog…

说来最近挺乱的,从去年一摩尔“八”事件以来,成都虽然都未直接遭大殃,却也总被殃及。天府之国,仿佛一夜之间,不再如往常般的安宁。

中国范围内,“又快又好”的经济发展,“快”是见了,“好”却还有待时间的检验,毕竟“好”的经济发展,检验标准可不止局限于经济。
至少目前看来,重大安全生产事故没见少多少,群体性的“不和谐”事件却多了许多。

世界范围内,环保的旗号喊得格外响亮,但能否真正做到“可持续发展”却又未必。
至少目前看来,气候是越来越诡异,末世说也得到广泛传播。
(但不得不承认的是,地震之后,成都的天气真是好了不少,经常能看到蓝天白云大太阳)

总的说来,我虽然对中国的种种制度和旧习不无担心,但对这届政府和领导班子,还是充满信心。

中国始终还是走不出人治的阴影,老百姓只能指望着代代都是好皇帝。但是问题就在于,一个好皇帝选出一个坏皇帝的可能性不小,而一个坏皇帝选出一个好皇帝的事情,往往只能是人们的一个梦。这也正是人治的弊端之一。

去年达赖和尚闹完西藏,今年热阿姨“发扬光大”闹新疆。他们用人们最痛恨的方式,传达了自己的声音。我痛恨他们的做法,但如果非要比恶心程度,他们还是比不过那释永x。

有人说,“安定团结”不好么?为什么总有人想起来搞破坏?其实,“安定团结”只是人“避害”的社会延伸,而“趋利”的社会延伸依然存在。所以,对于既得利益者,“趋利”的诉求在减弱,而“避害”的渴望在增强。所谓白天不懂夜的黑,他们自然很难了解“一无所有”或认为自己“一无所有”的人们为什么不把打砸抢烧当回事儿。

打砸抢烧,对于传达声音,解决问题而言,是历史的退步。秦刚说的很好,这永远不是什么民族问题,宗教问题。在法律面前,人人平等。司法的公开公平公正是任何一个国家,任何一个民族,都必须遵从的。

其实,不管是六四事件,西藏事件,还是这回的新疆事件,你不能说里面找不出一点合理的成分。这些事件不能全盘怪罪于敌对势力的煽动和广大群众的不明真相。如果犯罪分子以千人计算,如果大部分群众都不明真相,那么很明显问题在别的地方。

群体性事件中透露出的理性,往往来自于最初的善良的参与者[此处并不是在说群体性事件的利用者和煽动者]。这些最初的参与者甚至可能怀揣着完全相反的愿望,他们在为他们民族同胞争取自己应有权利的同时,也在为当权者辩护,从中协调二者的关系。然而,当事情真正发展起来,甚至被利用之后,他们却往往对局面完全失去控制。进而使得问题无法以武力威慑以外的对话等途径得以解决,因为此时“群体”的智慧与理智已然丧失殆尽,自然也就没人能代表“群体”。

突然想起最近看的一本书《医学是科学吗》。如果答案是肯定的,那么也就意味着“求真”与“实证”将压倒一切。

我们再进一步具体化某些问题:

“医生做手术时,需要考虑病人术后留下的疤痕么?”
“病人家属能要求医生向不治之症的病人隐瞒病情么?”
“医生有权为了病人的体验,而为病人处方安乐死么?”
“医生能为了多数人的利益,而损害少数人的利益么?”

如果我们在这些问题上有丝毫的犹豫,推广的结论也许是出人意料的。甚至可能为小日本或者纳粹当年惨绝人寰的毒气试验、冷冻试验、活体解剖等批上“科学”的外衣。

让我们再设想在“社会主义”的伟大祖国,突然发现了一个完全与世隔绝的原始部落。他们完全不注重个人卫生、他们信赖巫师、他们祭拜雷公电母、他们把不贞的女性活活烧死。

这里再试问下面这些问题:

“社会主义”的伟大祖国,能够用最“简单有效”的方式,帮助其实现跨越式的发展,从“原始社会”直接进入“社会主义社会”么?
能够直接强制推行“科学”,废除一切“愚蠢”的宗教或者信仰么?
能够直接强制推行“法律”、“民主”,废除一切不合理的社会习俗么?

如果我们对这些问题也有所犹豫,推广的结论同样可能出人意料。甚至可能为“鸦片战争”和“大东亚共荣”赋予积极的意义。

“多样性”,是这个世界“最最最”为美丽的特性。

“遗传复制”让我们同根而生,积淀优良与历史;“随机变异”让我们与众不同,形成大千世界与未来。

“变异”-“选择”-“遗传”是我们继续前行的永恒动力。然而,如何“进化”?如何“选择”?却是摆在我们面前的难题。

“Natural Law”?当然是,这也是难以完全避免的。没有弱肉强食,我们便不能成为“人”。但是已然成“人”的我们,应该时刻谨记,避免自己退化成了动物。因为成“人”之后,我们有更快速、更平和的发展方式。例如:

我们学会了使用工具,因此我们能迅速的外化出“锋牙利爪”;而不用“弱肉强食”的流血,以在自己的身体上,内化出“锋牙利爪”。
我们发明了语言和文字,以及各种各样的信息传播方式,因此我们能在体外,积累和传播大量的信息;而不用在体内,给自己进化出一个超级臃肿的头颅。
我们有了科学、法律和民主,因此我们能人道的研究医学,即使这种发展相较缓慢一点,但这避免我们退化成“畜生”。

总之,我们是“人”,我们能笑、能哭、能交流、能思考。我们不用杀死“弱小”来告诉自然,剩下的我是“强者”;而是能够有意识的帮助“弱小”来共同成为“强者”。

问题又来了。这里我们在扮演“上帝”的角色,我们在选择“强”与“弱”。但我们不是“上帝”,“上帝”不会错,但我们会。

我们错了,“自然选择”会淘汰掉我们人类。因此,其实矛盾的地方,并不在于“自然选择”有什么错。而是我们人类坐在了上帝的位置上,想自己掌握自己的命运。然而上帝依然时刻监视着我们,我们必须像是爬坡一般,一直努力前行,毫不懈怠;永远纠正“错误”,保持“正确”。

所以,为了能够纠正“错误”,我们必须保持“多样性”。因为“强与弱”、“对与错”等等都是相对的,而不是绝对的;都是历史的,而不是永恒的。

那么当共存的“多样性”发生冲突了,怎么办?

  1. 如果双方都拥有“人类”的理性,我们便尽量不要诉诸武力。选择“人类”的方式解决问题。
    我们保持“理性”,保持“宽容”,保持“尊重”,保持“多样性”。我们“区域自治”并且“加强交流”。“区域自治”旨不在于“分裂”,而是互不冲突,互相尊重。“加强交流”旨不在于所谓的“同化”,而是“相互借鉴与吸收”。

    [为什么分裂不好?因为“国家”早晚要消亡,“国家”的存在,是部分人的结合以互相帮持与历史的即成事实,而不在于人与人之间的共性。试想极限情形,每个省、甚至每个市都自立国家,是进步还是倒退?分裂是逆历史潮流而动的行为。]

    [“同化”是被滥用的一个词,大家都害怕被归类于此。然而“同化”是不可避免的事情,因为真理只有一个,只是我们不能确切的肯定而保持“多样性”而已。因此,“同化”不是说“非此即彼”的吞并,而是“相互借鉴与吸收”。随着发展的过程,不是支线被吞并到一条主线,而是很多条发展轨迹共同前行。直到最后,已然没有再相互独立的必要。最后形成的,也已然不是其中的任何一方。]

  2. 如果双方或者其中“某一方”失去了理性,虽然很难过,但我们也只有退化为动物的发展模式“弱肉强食”。“强者”将战胜“弱者”。
    但这里有一个特殊情况,那就是如果双方中“强者”保持了理性,而“弱者”失去了理性。那么作为拥有“人类”理性的强者,诉诸武力应有理性的“度”,应以对“调皮小孩”的心态处理问题。

总之,“相互理性的尊重”、承认“真理的相对性”或者“自己可能的谬误性”、“尊重多样性”是十分重要的。

做好自己,保持开放的心态。坚持自己认为正确的事情的同时,尊重别人认为正确的事情。
加强交流,理性思考、比较自己和对方的选择,并对自己的选择作出调整。

这些都是健全的心态和我们人类发展应有的“理性”态度。