第一百一十章 優化
孟響開始奮筆疾書。他感覺,如果用鍵盤,他寫代碼的速度只是一般,畢竟手速跟不上腦子。但是用筆,他僅僅用了3分鐘,就擼出了第一個版本的主體函數。當然,這只是八皇後主體程序。
八個for循環鼎立在前方,他有百分百的把握,只要寫完,這個解法一定是正確的。
只是他遇到了一個難題。
如果N不是定值時,他不知道要寫幾個for。
如果N是10,他就是10個for循環……
「這個就是,8個循環嵌套,百分百能求出來,但是如果是N皇后……」孟響說著說著,聲音小了下去。
「哥哥!你怎麼能用這麼笨的方法。」孟夢看到哥哥寫好的主體,有些哭笑不得。這種8個for,計算量完全就是指數形式的,屬於所有方法中時間最慢,消耗資源最多的方法。
孟響有些尷尬的摸了摸腦袋,時間太短了,他也沒法一下想的那麼全。
「那…換一種,反正這個的N皇后版本我也不知道怎麼改。」孟響在寫8個for循環時,腦中已經有了一定雛型,翻過一頁紙后,就繼續開始寫起了第二版。
「先對每一行的每一列進行探測,看是否能放置皇后,如果可以,就在這一列放一個皇后,然後行數加一。然後繼續探測下一行的皇后位置。」孟夢在旁邊提醒道。
孟響一邊點頭,一邊飛快的開始寫主體函數。
「是不是如果已經探測完所有的列都沒有找到可以防止皇后的列,就可以回溯了?」孟響抓住一點思路,下意識問道,問的同時,手上的筆一直沒停。
「嗯!回溯之後,把上一行的皇后位置往後移一列——」
「如果上一行的皇后也找不到位置,那麼應該就繼續往前回溯,直至前方某一行找到皇后的位置能移動,或者回到第一行!」孟響接話道,他思路一下子清晰了。「如果回到第一行,也無法找到可以放置皇后的位置,那就表示所有的解都已經找到。」
「哥哥真聰明。」聽到哥哥的話,孟夢的大眼睛眯成了月牙兒。她繼續說道:「同時,如果一直不用回溯,找到最後一行放置皇后,就表示已經找到一個結果。」
「明白了,因為要找的是所有的解,那麼,找到了一個結果后不能直接結束程序,程序應該在第一行無法找到放置皇后的位置時結束。而找到一個結果后,應該清除掉,然後在剛剛放皇后的下一列開始探測。」
孟響嘴裡念念叨叨,腦中飛速運轉,手上書寫的速度更是沒有絲毫停頓和放緩,白紙上飛快出現一行行代碼。有了孟夢的助力,孟響很快就寫完大部分程序。這次,他的循環一下精簡到了兩個while,和剛剛8個for簡直有著天差地別。
這次,他僅僅用了5分鐘,就寫好了3個函數。
在手寫代碼的速度上,他有著無與倫比的優勢。別人都是受限于思考速度,必須一邊停筆理順思路一邊寫,而他則不被這個問題困擾。即便是妹妹,也絕對沒有他這種快槍手的速度……
「還有10分鐘才結束,哥哥真厲害。」孟夢看著哥哥滿滿地寫了一大版,既驚嘆哥哥書寫代碼的速度,又驚嘆哥哥非凡的思考速度和理解能力。
哥哥果然和自己一樣,也是很聰明的孩子!
「我們一起來過一遍,我來說每個地方的用處,你來幫我把把關。」孟響大致掃了一眼程序。
孟夢點了點頭,一邊聽著哥哥解釋程序的邏輯,一邊開始判斷邏輯的正確性以及是否能優化。
……
「二維數組改成一維數組,數組下標表示行,數組元素表示列,這樣能節省內存!」高三那名集訓隊的學長眼前一亮,思如泉湧。看了看時間,他立馬開始寫起了第二版的程序。
……
「遞歸演算法的話,先天弱了一些,那麼……」高二「漂亮」男生努力觀想自己女裝的畫面,只有這樣,他才能提高一點自己的思考能力和思維活躍度。
突然,他腦中蹦出了一個題目。
猴子選大王!
「需要有個數據結構能夠動態的刪除掉已經有的值!」他喃喃自語道,顯得神神叨叨的。
「你怎麼了?」女生看他一臉茫然,奇怪的問道。
「我怎麼了……」說到這,男生眼前一亮,猛地拿起一支筆來:「遞歸也是可以優化的,我們應該用鏈表試試。」說道這,他立馬在草稿紙上開始畫起了模型圖。
……
「遞歸方法寫出來了,有什麼辦法能繼續優化嗎?」小胖子叼著筆,皺著眉仔細思索,他完全是一個人在戰鬥。而其他三人眼巴巴地看著他這位NOIP拿580分的大高手。
這三個傢伙是指望不上了,就算他們能理解程序,也不能立馬給自己建議。
「N*N的棋盤……」小胖子的思維以不符合他體型慣性的速度開始旋轉。
那麼……
想到這,小胖子直接爆了個粗口:「卧槽!」
另外嗷嗷待哺地三人嚇了一跳。
「怎麼了,文斌。」其中一位女生小聲問道,這會兒,小胖子就是她的男神。
當然,只是這30分鐘而已。
聽到「文斌」兩個字,小胖子節操碎了一地,連雞皮疙瘩都起了不少,在他眼裡,參加信息競賽的都是哥們,這麼叫他…不能忍!
「N*N的棋盤,不就是正方形嘛,那特么不就是對稱嘛,我……得趕緊改下程序,還能優化點。」小胖子喃喃道,他看了看時間,整個人抖了一抖,連忙開始寫第二版的代碼。
其他三人在旁邊給他鼓氣……
原來,一神帶三坑是這種滋味。
他一邊寫,一邊在心裡默默想道。
……
「大概就是這樣了。」面對孟夢這種學生,孟響飛快地就解釋完了所有的程序,孟夢也迅速理解了其中的邏輯。
在她看來,這些東西的邏輯還是很簡單的。
「那,哥哥,我想到一個方法,你看看能不能試一下。」孟夢琢磨了一會兒,有些不好意思地說道:「既然數組有下標,那麼不用矩陣…不,二維數組,試試能不能用一維數組,下標來表示列,下標0就是第一列!這個哥哥能寫嘛?」
聽到妹妹的提醒,孟響眼前一亮。