解题招数

解题最有效的几招:

常用:

特例:从各种条件的一个特例出发,看在这个特例条件下的答案。因为一般题目的答案在特例下肯定成立,所以如果没有矛盾则答案成立。例如解参加宴会的握手问题。

倒推(归约):从问题出发推出问题成立时的结论或场景,最后看结论或场景中是否有已知条件,如果有,则问题的解。例如两个杯子一个9L一个4L,要盛出6L水。

试错:最常用的一般方法,从已知条件出发推出结论或场景,再从结论推出结论,直至推出解答。最差的时候将遍历解题空间(所有条件、推论的组合),最佳的时候一次就可以到达答案。

不常用:

找到关键条件:找到所有条件中最关键的那个,此条件将把解题空间极大缩小,或者把问题重构为一个更简单的问题

求解类似题目:

换一种思路或解法:如果一个常见的解法的计算量很大看看有没有简单的方法,不过有时很难想到,因为思维定式的束缚。例子:100个人比赛,要决出冠军至少需要赛多少场。常见方法是列出一棵树来后一个个数非叶子结点。简单的方法是100人比赛要淘汰99人,一场比赛淘汰一人因此需要99场比赛

使用更简单的模型:比如宇宙飞船在太空中加速的问题,可以通过作用力和反作用力的模型解释也可以通过动量守恒的模式,但是毫无疑问动量守恒的模型更简单,更易理解。复杂的模型导致复杂的方法,我们知道复杂到一定程度将是不可计算的,因此要选择更简单的模型。

乔布斯在斯坦福大学毕业典礼上的演讲

乔布斯在斯坦福大学毕业典礼上的演讲。

原文在这里:
http://news-service.stanford.edu/news/2005/june15/jobs-061505.html




很荣幸和大家一道参加这所世界上最好。我大学没毕业,说实话,这是我第一次离大学毕业典礼这么近。今天我想给大家讲三个我自
己的故事,不讲别
的,也不讲大道理,就讲三个故事。

第一个故事讲的是点与点之间的关系。我在里德学院(Reed College)只读了六个月就退学了,此后便在学校里旁听,又过了大约一年半,我彻底离开
。那么,我为什么退学
呢?
这得从我出生前讲起。我的生母是一名年轻的未婚在校研究生
,她决定将我送给别人收养。她非常希望收养我的是有大学学历的人,所以把一切都安排好了,我一出生就交给一
对律师夫妇收养。没想到我落地的霎那间,那对夫妇却决定收养一名女
孩。就这样,我的养父母----当时他们还在登记册上排队等著呢----半夜三更接到一个电话: "我们这儿有
一个没人要的男婴,你们要么?""当然要"他们回答。但是
,我的生母后来发现我的养母不是大学毕业生,我的养父甚至连中学都没有毕业,所以她拒绝在最后的收养文件上签
字。不过,没过几个月她就心软了,因为我的养父母许诺日后一定送我
上大学。 17 年后,我真的进了大学。当时我很天真,选了一所学费几乎和斯坦福大学一样昂贵的学校,当工人的养父母倾其所有的积蓄为我支付了大学学费。读了六个月后,我却看不
出上学有什么意义。我既不知道自己这一生想干什么
,也不知道大学是否能够帮我弄明白自己想干什么。这时,我就要花光父母一辈子节省下来的钱了。所以,我决定退学,并且
坚信日后会证明我这样做是对的。当年做出这个决定时心里直打鼓
,但现在回想起来,这还真是我有生以来做出的最好的决定之一。从退学那一刻起,我就可以不再选那些我毫无
兴趣的必修课,开始旁听一些看上去有意思的课。
那些日子一点儿都不浪漫。我没有宿舍,只能睡在朋友房间的地板上
。我去退还可乐瓶,用那五分钱的押金来买吃的。每个星期天晚上我都要走七英里,到城那头的黑尔科里施
纳礼拜堂去,吃每周才能享用一次的美餐。我喜欢这样
。我凭借好奇心和直觉所干的这些事情,有许多后来都证明是无价之宝。我给大家举个例子:
当时,里德学院的书法课大概是全国最好的。校园里所有的公告栏和每
个抽屉标签上的字都写得非常漂亮。当时我已经退学,不用正常上课,所以我决定选一门书法课,学学怎
么写好字。我学习写带短截线和不带短截线的印刷字体
,根据不同字母组合调整其间距,以及怎样把版式调整得好上加好。这门课太棒了,既有历史价值,又有艺术造诣,这一点
科学就做不到,而我觉得它妙不可言。
当时我并不指望书法在以后的生活中能有什么实用价值。但是
,十年之后,我们在设计第一台 Macintosh 计算机时,它一下子浮现在我眼前。于是,我们把这些东西全都设计进了计算机中。这是第一台有这么漂亮的文字版式的计算机。要不是我当初在大学里偶然选
了这么一门课,Macintosh 计算机绝不会有那么多种印刷字体或间距安排合理的字号。要不是 Windows 照搬了 Macintosh,个人电脑可能不会有这些字体和字号
。要不是退了学,
我决不会碰巧选了这门书法课,个人电脑也可能不会有现在这些漂亮的
版式了。当然,我在大学里不可能从这一点上看到它与将来的关系。十年之后再回头看,两者之间的关系就
非常、非常清楚了。
你们同样不可能从现在这个点上看到将来;只有回头看时
,才会发现它们之间的关系。所以,要相信这些点迟早会连接到一起。你们必须信赖某些东西----直觉、归宿、生命
,还有业力,等等。这样做从来没有让我的希望落空过
,而且还彻底改变了我的生活。
我的第二个故事是关于好恶与得失。幸运的是,我在很小的时候就发现
自己喜欢做什么。我在 20 岁时和沃兹(Woz,苹果公司创始人之一 Wozon 的昵称----译注)在我父母
的车库里办起了苹果公司。我们干得很卖力,十年后
,苹果公司就从车库里我们两个人发展成为一个拥有 20 亿元资产、4000 名员工的大企业。那时,我们刚刚推出了我们最好的
产品----Macintosh 电脑----那是在第 9 年,我刚满 30 岁。可后来,我被解雇了。你怎么会被自己办的公司解雇呢?是这样,随著苹果公司越做越大
,我们聘了一位我认为非常
有才华的人与我一道管理公司。在开始的一年多里,一切都很顺利
。可是,随后我俩对公司前景的看法开始出现分歧,最后我俩反目了。这时,董事会站在了他那一边,所以在 3
0 岁那年,我离开了公司,而且这件事闹得满城风雨。我成年后的整个生
活重心都没有了,这使我心力交瘁。
一连几个月,我真的不知道应该怎么办。我感到自己给老一代的创业者
丢了脸----因为我扔掉了交到自己手里的接力棒。我去见了戴维帕卡德(David Packard,惠普公司创始
人之一─译注)和鲍勃诺伊斯(Bob Noyce,英特尔公司创建者之一─译注),想为把事情搞得这么糟糕说声道歉。这次失败弄得沸沸扬扬的,我甚至想过逃离硅
谷。但是,渐渐地
,我开始有了一个想法----我仍然热爱我过去做的一切
。在苹果公司发生的这些风波丝毫没有改变这一点。我虽然被拒之门外,但我仍然深爱我的事业。于是,我决定从头开始。
虽然当时我并没有意识到,但事实证明,被苹果公司炒鱿鱼是我一生中
碰到的最好的事情。尽管前景未卜,但从头开始的轻松感取代了保持成功的沉重感。这使我进入了一生
中最富有创造力的时期之一。 在此后的五年里,我开了一家名叫 NeXT 的公司和一家叫皮克斯的公司,我还爱上一位了不起的女人,后来娶了她
。皮克斯公司推出了世界上第一部
用电脑制作的动画片《玩具总动员》(Toy Story),它现在是全球最成功的动画制作室。世道轮回,苹果公司买下 NeXT 后,我又回到了苹果公司,我们在 NeXT 公司开发的技术
成了苹果公司这次重新崛起的核心。我和劳伦娜(Laurene
)也建立了美满的家庭。
我确信,如果不是被苹果公司解雇,这一切决不可能发生
。这是一剂苦药,可我认为苦药利于病。有时生活会当头给你一棒,但不要灰心。我坚信让我一往无前的唯一力量就
是我热爱我所做的一切。所以,一定得知道自己喜欢什么
,选择爱人时如此,选择工作时同样如此。工作将是生活中的一大部分,让自己真正满意的唯一办法,是做自己认为是有
意义的工作;做有意义的工作的唯一办法,是热爱自己的工作
。你们如果还没有发现自己喜欢什么,那就不断地去寻找,不要急于做出决定。就像一切要凭著感觉去做的事情一样
,一旦找到了自己喜欢的事,感觉就会告诉你。就像任何一种美妙的东
西,历久弥新。所以说,要不断地寻找,直到找到自己喜欢的东西。不要半途而废。
我的第三个故事与死亡有关。17 岁那年,我读到过这样一段话,大意是:"如果把每一天都当作生命的最后一天,总有一天你会如愿以偿。
"我记住了这句话,从那时起,33
年过去了,我每天早晨都对著镜子自问:"假如今天是生命的最后一天
,我还会去做今天要做的事吗?"如果一连许多天我的回答都是"不",我知道自己应该有所改变了。
让我能够做出人生重大抉择的最主要办法是,记住生命随时都有可能结
束。因为几乎所有的东西----所有对自身之外的希求、所有的尊严、所有对困窘和失败的恐惧----在死
亡来临时都将不复存在,只剩下真正重要的东西。记住自己随时都会死
去,这是我所知道的防止患得患失的最好方法。你已经一无所有了,还有什么理由不跟著自己的感觉走呢?
一年前,我被诊断出癌症。我在早上七点半作断层扫描
,在胰脏清楚出现一个肿瘤,我连胰脏是什么都不知道。医生告诉我,那几乎可以确定是一种不治之症,我大概活不到
三到六个月了。医生建议我回家,好好跟亲人们聚一聚
,这是医生对临终病人的标准建议。那代表你得试着在几个月内把你将来十年想跟小孩讲的话讲完。 那代表你得把每件事情
搞定,家人才会尽量轻松。那代表你得跟人说再见了
。我整天想着那个诊断结果,那天晚上做了一次切片,从喉咙伸入一个内视镜,从胃进肠子,插了根针进胰脏,取了一些肿瘤
细胞出来。我打了镇静剂,不醒人事,但是我老婆在场
。她后来跟我说,当医生们用显微镜看过那些细胞后,他们都哭了,因为那是非常少见的一种胰脏癌,可以用手术治好。所
以我接受了手术,康复了。
这是我最接近死亡的时候,我希望那会继续是未来几十年内最接近的一
次。经历此事后,我可以比之前死亡只是抽象概念时要更肯定告诉你们下面这些:
  没有人想死。即使那些想上天堂的人,也想活着上天堂
。但是死亡是我们共有的目的地,没有人逃得过。这是注定的,因为死亡简直就是生命中最棒的发明,是生命变化的媒
介,送走老人们,给新生代留下空间。现在你们是新生代
,但是不久的将来,你们也会逐渐变老,被送出人生的舞台。抱歉讲得这么戏剧化,但是这是真的。
你们的时间有限,所以不要浪费时间活在别人的生活里
。不要被信条所惑----盲从信条就是活在别人思考的结果里。不要让别人的意见淹没了你内在的心声。最重要的,拥有
跟随内心与直觉的勇气,你的内心与直觉多少已经知道你真正想要成为
什么样的人。任何其它事物都是次要的。
在我年轻时,有本神奇的杂志叫做 《Whole Earth Catalog》,当年我们很迷这本杂志。那是一位住在离这不远的Menlo Park的Stewart Brand发行的,他把杂志办得很有诗意
。那是1960年代末期,个人计算机跟桌上出版还没发明
,所有内容都是打字机、剪刀跟拍立得相机做出来的。杂志内容有点像印在纸上的Google,在Google出现之前35年就有了:
理想化,充满新奇工具与神奇的注记。
Stewart跟他的出版团队出了好几期《Whole Earth Catalog》,然后出了停刊号。当时是1970年代中期,我正是你们现在这个年龄的时候
。在停刊号的封底,有张早晨乡间小
路的照片,那种你去爬山时会经过的乡间小路。在照片下有行小字
:求知若饥,虚心若愚。那是他们亲笔写下的告别讯息,我总是以此自许。当你们毕业,展开新生活,我也以此
期许你们。

  求知若饥,虚心若愚。
  非常谢谢大家


无题

长相思   - 纳兰性德

山一程,水一程,身向榆关那畔行,夜深千帐灯。 风一更,雪一更,聒碎乡心梦不成,故园无此声。

python如何支持并发

原文见A followup on Concurrency within Python

  1. 安全线程,去掉了GIL。Adopt/move forward with a version of CPython based on the work/concepts offered in Adam Olsen's Safe/Without GIL Threading work. Adopt the monitor and deadlock work for all of CPython, but leave the GIL removal as a compile-time option (python3.0 and python3.0-mt binaries).
  2. 新增 pyProcessing, pprocess, or Parallel-Python 模块to the standard library for those who want to use vanilla cpython, and to whom the fork method works. Which module is added should use existing Python semantics, but be powerful enough for advance/distributed usage. Note, I have started work on a PEP to get the pyProcessing module into the stdlib.
  3. Add an Actor - or Actor-Like module to the functools module, in keeping with the concepts of the current implementations. Python's implementation would be obviously leaky. (Note, I am not a functional programmer by any stretch, I like my OOP, suggestions welcome). This could easily take advantage of both the Safe Threading work.
  4. Add a lightweight (not XML) messaging system to couple with the Actor implementation . (no, I have no suggestions here)
  5. 作者没说,我想当然是stackless python

诗二首

录诗二首,以表心情
昔年移柳,依依汉南。今看摇落,凄怆江潭。树犹如此,人何以堪!

                                ——东晋 恒温

衣上征尘杂酒痕,远游无处不消魂。此身合是诗人未?细雨骑驴入剑门。

                                ——南宋 陆游                                                                                                     

关于查询存储服务的思考

看来接入服务器内部,确实需要一个事务的处理机了,要把这个概念抽象出来,并实现之。主要用于历史文件的多点查询、批量升级、群呼等操作。否则现在出现了大量虽不尽相同,但处理流程相似的雷同代码。

好书列表,虽不能尽读,心向往之

AIMA = Artificial Intelligence a Modern Approach by Stuart Russell and Peter Norvig

AMOP = The Art of the Meta Object Protocol by Gregor Kiczales

ATTAPL = Advanced Topics in Types and Programming Languages by Benjamin C. Pierce

AWDWR = Agile Web Development with Rails by by Dave Thomas and David Heinemeier Hansson

EOPL = Essentials of Programming Languages by Daniel P. Friedman, Mitchell Wand, and Christopher T. Haynes

CLRS = Introduction to Algorithms, 2nd Edition by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliff Stein

CLtL = Common Lisp the Language by Guy L. Steele Jr.

CTM = Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi

GOF = Design Patterns by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides

HTDP = How To Design Programs by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi

K&R = The C Programming Language by Brian Kernighan and Dennis Ritchie

LiSP = Lisp In Small Pieces by Christian Queinnec

LL = Lessons Learned in Software Testing by Cem Kaner, James Bach and Bret Pettichord

PAIP = Paradigms of Artificial Intelligence Programming by Peter Norvig

PCL = Practical Common Lisp by Peter Seibel

PLP = Programming Language Pragmatics by Michael L. Scott

SICP = Structure and Interpretation of Computer Programs by Hal Abelson and Gerald J. Sussman, with Julie Sussman

TAOCP = The Art Of Computer Programming by Donald E. Knuth

TAPL = Types And Programming Languages by Benjamin C. Pierce

TCPL = The C++ Programming Language by Bjarne Stroustrup

TCS = Testing Computer Software by Cem Kaner, Jack Falk, and Hung Quoc Nguyen

TLS = The Little Schemer by Daniel P. Friedman and Matthias Felleisen

TSPL = The Scheme Programming Language by R. Kent Dybvig

TSS = The Seasoned Schemer by Daniel P. Friedman and Matthias Felleisen

TRS = The Reasoned Schemer by Daniel P. Friedman, William E. Byrd and Oleg Kiselyov

WELC = Working Effectively with Legacy Code by Michael Feathers