錢羽之的眼神最早開始恍惚,李加奈堅持到這裏也開始走神了,隻有馮珊還在聽。
“二分查找從一個有序表裏找特定值,本質是一種分治策略,也就是把一個大問題分割爲若幹相似的子問題,然後要麽直接求解,要麽繼續分割。它爲什麽要求有序表?是爲了确保每次運算能夠同時求解全部子問題。舉個例子,如果升序表的中位值小于被查找值,我可以同時确保兩個結論,一,被查找值不在有序表的前一半中,二,被查找值在有序表的後一半中——那麽接下來我在有序表的後一半中重複上述操作就行了。”
“我們的問題是類似的,從概率上,首先我們可以合理地假設有且僅有1張卡是錯誤的。然後,我們每次統計已知的包含錯誤卡片的所有卡片中的一半,如果統計結果表明錯誤卡片不在這一半中,那麽一定在另一半中,反之亦然。于是我就縮小了一半的錯誤卡片‘嫌疑範圍’。我反複進行折半操作縮小嫌疑範圍、縮小到一定程度時,問題也就不再是問題了。”
“我以前和你說過,我們現在做的穿孔卡計算機,其實際能力并不限于眼前看到的這些。剛才我的折半操作很機械吧――總是分出一半、輸入,然後檢查結果,把包含錯卡的那疊拿來重複操作。”
“那麽如果有一天,我們設計一台機器來代替我剛才的重複機械操作,與制表機聯合起來就能夠完成更多的事情,很多大問題将被分解爲小問題,然後采用同一個操作流程解決。”
“把看似複雜的問題層層分解爲與原問題相似的規模較小的問題,反複用類似的一系列機械性操作求解,讓計算機也能夠完成,這樣的思想叫做‘遞歸’。這是我們利用計算機很本質的一種思路,你們要好好思考。特别是,在思考這類問題時,不要把現有機械計算機的運行速度考慮進去,覺得還不如人力快。關鍵要想一想,在人不加以幹涉的情形下,計算機僅依照規則運行能夠求解什麽問題。也就是,什麽樣的問題是計算機可以解決的,我們叫‘可計算問題’。至于速度,那不是問題――面包會有的。”
馮諾停了下來,讓馮珊仔細咀嚼這段話,對她來說,這樣的思維模式與數學類似,但又與以前學習的數學相當不同。而李加奈和錢羽之的數學也就是四則運算的水平,要他們理解實在是有點勉爲其難。因爲昨晚都沒睡好,這時已經十分迷糊了,這番話不啻于催眠曲――迷糊間錢羽之還在納悶這事和面包有什麽關系。
“好了,你倆睡覺去吧。我看看這張卡片究竟是怎麽回事。”馮諾把還在呆呆思考的馮珊撇在一邊,對錢羽之和李加奈說道,他一指裏間,“可以在那張床上睡。”說完,他拿起了桌上打錯了孔的卡片。
李加奈從床上醒來,發現錢羽之還坐在椅子上,靠着牆邊睡得正香。她環顧了一下,馮珊在工作台邊看書邊計算着什麽,而馮元老不在房間裏,估計又去哪兒開會了。
她打着呵欠下了床,捅了捅錢羽之,說了聲:“上床去睡吧。”沒想到他隻是哼了一聲又不動了。李加奈便用力把他拖到了床上——說是兩人輪班,其實昨天晚上錢羽之熬夜值班的時間比她長得多。
大概是感覺到了床上殘留的體溫,錢羽之翻了一個身,似乎想蜷進李加奈剛剛睡出的凹陷裏,繼續呼呼大睡起來。
李加奈走到了工作台邊倒了一杯水喝。這時她看到馮珊放下書揉了揉眼睛,似乎是打算休息一會,就和她閑聊了起來。不一會,她們就說定下星期一起去參加李加奈和文理學院同學的聚會――據說還有幾位前輩也會參加。
攻關小組之後的幾天對複制機進行了反複改進與測試,應馮諾的要求,又在複制機的穿孔機構那一排增加了一套讀卡機構,這個改動不大,但卻可以使複制機兼有部分驗證機(Verifier)的功能。複制完成後,可以改接少量配線,使機器功能變爲自動檢查兩疊卡片的穿孔是否一緻,并在發現穿孔不一緻時停機亮燈報警。
二分查找再快,總也比不得直接過一遍機器更快。
此外,改進後的版本還可以固定一張母卡在讀卡機構中,穿孔及驗證一疊卡片。在實際應用中,這項功能可以把一批卡片的共通孔位預先打好,減小人工打孔的工作量。
不過,雖然複制機經過改進,也修複了打錯孔的問題,卻仍會偶爾出現漏打孔的現象。最後,攻關小組降低了卡片傳動和處理速度,發現問題消失了。
“看來是繼電器反應速度的問題了。”孫立把手中的筆扔到了桌面上,“降速運行吧。”
所有人都“唰”地看向馮諾,馮諾隻好無言地點了點頭。但元老們現在都練得臉皮頗厚――大家水平半斤八兩,誰也别笑話誰。尴尬很快恢複了過來,他又提出了開發譯碼機的方案。
按計劃,制表機本應集成打印和彙總穿孔的功能,出于簡化單台機器複雜性的目的,現階段制表機沒有包含這些部分。因此馮諾打算先搞個最基本的數字譯碼機,由于不考慮拉丁字母的打印,甚至已經不能稱之爲“譯碼”,單純隻是打印,其機械結構與複制機類似,無非是檢孔後激活繼電器驅動弧形字排把0-9的數字打印在卡片頂端。現在複制機算是開發完成了,譯碼機不過是水到渠成的事。
機械口的元老們覺得問題不大,答應盡快制造一台樣機送過去。
會到這裏就散了,馮諾回到了辦公室:他想着今天還得再備備課――随着機械計算機的進展,他覺得得深入的講授一些與軟件工程有關的數學問題了――第一代的程序員幾乎都是數學家。
他在辦公室裏處理了數據中心的日常公文,循例到機房走了一圈,做了日常的設備維護。又把“待修目錄”浏覽了一遍,用紅鉛筆在幾個“火燒眉毛”級别的項目上打了鈎,這些隻能等上完課之後犧牲睡眠時間來修理了――自從他弄了機械計算機的項目,原先的工作壓下來不少。現在徐老五已經幫他做了大多數的文書工作,本職再荒廢下去可就說不過去了。
好不容易把手頭的事情逐一處理完,他才起身到了工作間。
現在“工作間”裏已經塞的滿登登的。從機械廠制造的各種“工程樣機”塞滿了這個車間,有的則根本不是“技術會議”上的産物,而是某些動手能力強的元老的腦洞的産物――要說完全是腦洞也不盡然,因爲這些東西大緻就是當年機械計算機發展過程中的不同技術思路。
工程樣機自然是不太考究的,因爲時間緊,又多是僅僅驗證設計思路是否具有工程可行性,所以在設計和制造上沒做什麽優化,秉承機械廠産品一貫的傻大黑粗不說,許多設備的零件也是外露的,一來節約制造時間,二來便于随時查障調試。
車間裏滿是鐵嘴鋼牙的機器,地上也有不少散落的物料零件。所以馮諾一直關照自己的這三個幫工,進工作間一定要做好防護。他自己以身作則,頭戴藤編安全帽,身穿粗布工作服,腳穿勞保皮鞋。
穿過設備區,車間的另一頭是研究區,一張笨重的大号“聖船牌”12人會議桌矗立正中,桌面上堆滿了圖紙、文檔和草稿計算紙,周圍放着七八張折疊椅。牆角是碩大的黑闆架,黑闆上滿是粉筆書寫的公式和數字。靠牆是一排開放式的書架,層層疊疊的塞滿了各種技術資料和參考材料――不過幾個月的時間,就累積起了這麽多的文書材料。這些材料按照企劃院的規定,都由馮珊和李加奈按類别整理裝訂起來――都是要存檔的,爲将來的技術工作者提供參考。
可是要是沒有一套高效的檢索設備的話,這些技術資料恐怕隻會沉寂在大圖書館的某個角落最後被人慢慢的遺忘。想到這裏,馮諾愈發感到自己的重任在肩。
研究區的地上滿是散落的計算草稿,搞得如同老電影炮黨敗逃時候一樣。研究小組整天廢寝忘食,自然也顧不上打掃衛生。總算他們的便當盒還是每個人都洗幹淨帶走的,不然就這邋遢程度非招來老鼠不可。
馮諾一屁股在椅子上坐下,拿出一本關于離散數學的專業教材――這是臨高本地翻印的,經過真理辦公室的審核,所以無需保密措施,可以直接插在書架上。
剛想打開,忽然看到桌子底下的字紙簍塞滿了碎紙片――不是一般的碎紙片,而是撕的粉碎的碎紙片,這不是他們常用的計算紙張,而是信紙。上面似乎還密密麻麻的寫滿了字迹。
——
下次更新第七卷兩廣攻略篇53節
(本章完)