1. 程式人生 > >問題與不足——海明距離

問題與不足——海明距離

其實這是道很簡單的搜尋題,但是寫完後感覺自己有很多問題,在此總結。

題目大意

對於二進位制串a,b,他們之間的海明距離是指兩個串異或之後串中1的個數
給你一些01串,每個二進位制串都預設長度二十,求最小海明距離
最多有100000個串

分析

暴力當然是兩兩枚舉了。

其實正解也是暴力,考慮到長度只有二十,他們變化最終也只有一百萬左右種,然後用bfs每次對於佇列中的一個數,都改變一位。明顯,最先找到的相同的數,所來自的不同的數根源,就是距離最小的,因為他們改變的數是最少的,海明距離就是最小的。

總結

雖然題目很簡單,但是打完之後,卻總覺得打得不對,總有問題。結果證明真的有問題,調了半天原來是沒有想到bfs找到答案時的細節:因為出答案的bfs到的那一層,是有可能與上一層匹配的,而如果本層和本層先找到匹配就直接跳出,會忽略前面的情況
導致答案大了1。

這個問題不是第一次犯了,想了很久,終於發現原因。平時每次打題前很興奮,掌握大概步驟就開打了,殊不知是在碰運氣,細節太多的題目,根本保證不了正確性。即使是這一題,沒有想好處理答案就打,最後忽略掉,debug半天才找出錯,然後還要對之前的程式各個部分開刀,極大浪費時間。就是因為一時之懶。這樣每每一時懶,久而久之就越來越多思維漏洞,越來越不自信。從而打題越來越慢,越慢就越不想想,惡性迴圈。

不只是資訊學,平時文化課,特別是理科問題尤其凸顯,文科也有一些。平時不認真,只是草草算個答案,考試就無所適從了,簡單題弄好幾遍還能錯。我覺得語文老師說的一句話很對:做過一道題,就要認真對待,不然根本無用。貪圖一時之快,痛苦長久。

沒有個認真的態度去做事,生活會很亂,如果這樣,倒不如躺在床上什麼都不幹算了。應付的事會有,但不能很多。

幸好早發現,在還沒有什麼大惡果的時候。