佩服國防科大劉萬偉老師的數學功底與編碼功底,感謝劉老師無私分享!
python合法二進制判定、=====正文=======
題目要求:稱一個 0-1 串是“好串”,如果它的任何子串不在其中連續出現三次以上。編寫程序,輸入正整數 n,輸出某個長度為 n 的好串。
python求解最優化問題,在數學學上可以證明:存在任意長度的好串。事實上,若 w 是一個長度為 k 的好串,將 w 中的 0 和 1 分別替換為 01 和 10 必然是一個長度為 2k 的好串(感興趣的讀者可以用反證法證明);同時,好串的任意子串必然也是好串。
顯然,單獨的 0 和 1 都是好串,根據上面的性質,可以得到任意長度的好串。根據這個思路(稱為“標準迭代”),可以寫出下面的代碼:
這個程序只有四行,算是十分短小精悍的。但是,它的可讀性并不好:同時,還用到了 lambda 表達式、map 函數、字符串與列表的相互轉化等十分復雜的機制;更重要的是,它的執行效率不高。
這時,應當仔細分析一下這個問題的特殊性 —— 考慮下面的 01-串序列:0、01、0110、01101001、…… (其規律為:下一個串是在上一個串的基礎上添加原串的對偶串(即按位取反的串)獲得)。
不難歸納證明:如果用 0 作為起始好串,上面的串列與按照標準方式迭代的序列恰好一樣。
按位取反可以通過與一個全 1 序列進行異或操作得到,這樣就獲得了下面的代碼:
細節:倒數第二行之所以需要切片操作,是因為要把異或后字串的符號位去掉。
這樣,代碼的效率與可讀性較之于第一個版本有了大幅度的提高。但是,循環體代碼里面仍然存在著進制轉換、移位、求長度、切片等操作,效率仍然不是十分令人滿意。同時,總感覺該問題某些特殊的性質沒利用上!什么性質呢?—— 對!就是“對稱性”!!!
想到了這三個字,代碼的樣子馬上就會發生翻天覆地的變化!
這時,你可能不太相信,解決這個問題的代碼竟可以簡單成這樣:循環體中,只存在簡單的字串連接操作!
但是,冷靜!這是仍然應該問一下自己:還能繼續優化嗎? 中國傳媒大學胡鳳國老師敏銳的指出:這段代碼跟原來比,多耗費了一倍的空間!
這的確是一個問題!怎么解決呢?事實上,串的長度每次增加一倍,這個“浪費”只出現在循環的最后一步!如果我們讓循環少做一次,不就可以了嗎? 終極代碼如下:
----------相關閱讀----------
教學課件
1900頁Python系列PPT分享一:基礎知識(106頁)
1900頁Python系列PPT分享二:Python序列(列表、元組、字典、集合)(154頁)
1900頁Python系列PPT分享三:選擇與循環結構語法及案例(96頁)
1900頁Python系列PPT分享四:字符串與正則表達式(109頁)
1900頁Python系列PPT分享五:函數設計與應用(134頁)
1900頁Python系列PPT分享六:面向對象程序設計(86頁)
1900頁Python系列PPT分享七:文件操作(132頁)
1900頁Python系列PPT分享八:異常處理結構與程序調試、測試(70頁)
報告PPT(163頁):基于Python語言的課程群建設探討與實踐
系列題庫分享
1000道Python題庫系列分享一(17道)
1000道Python題庫系列分享二(48道)
1000道Python題庫系列分享三(30道)
1000道Python題庫系列分享四(40道)
1000道Python題庫系列分享五(40道)
1000道Python題庫系列分享六(40道)
1000道Python題庫系列分享七(30道)
1000道Python題庫系列分享八(29道)
1000道Python題庫系列分享九(31道)
相關技術文章
Python使用超高效算法查找所有類似123-45-67+89=100的組合
Python查找所有類似于123-45-67+89 = 100的組合
數學老師從沒這么教過,乘法豎式中進位可以是多位(附Python實現與測試源碼)
計算Fibonacci數列第n項的第8種方法(數學推導與Python實現)
使用Python模擬偽隨機數生成原理
使用Python模擬蒙蒂霍爾悖論游戲
使用Python編寫一個聰明的尼姆游戲
蒙特.卡羅方法求解圓周率近似值原理與Python實現
兩行Python代碼實現電影打分與推薦
Python按位異或運算符^應用案例一則:查找只出現一次的數字
閑聊
董付國老師《Python程序設計基礎》完美落幕
又一個學期結束了,送給在校大學生幾句話
淡定!不要因為納入了高考和二級考試甚至極個別小學課程就盲目夸大Python!
全國計算機等級考試二級Python考試大綱預測和分析
大家都在學Python,你和別人的差距在哪?
大學生們顫抖吧,中學生已經開始學Python了!
學會提問,你就成功了一大半!
盤點那些讓人上火的提問方式(論如何讓交流更高效)
----------喜大普奔----------
1、董付國老師Python系列教材,亞馬遜、京東、當當、天貓均有銷售:
《Python程序設計基礎》(2018年2月第6次印刷)
《Python程序設計(第2版)》(2018年2月第5次印刷)
《Python可以這樣學》(2018年2月第5次印刷)(本書已被引入臺灣發行繁體版)
《Python程序設計開發寶典》(2018年2月第3次印刷)
《中學生可以這樣學Python》
《Python程序設計基礎(第2版)》(2018年3月隆重上市)
董付國老師6本Python系列圖書閱讀指南
董付國老師6本Python系列教材被北大、復旦等近百所高校選作教材
熱烈慶祝《Python可以這樣學》在臺灣發行繁體版
2、董老師120課免費視頻地址: https://pan.baidu.com/s/1jJeAs8Q 密碼: px59
3、董老師CSDN學院9套“Python可以這樣學”收費視頻課程匯總地址:https://edu.csdn.net/search?keywords=%E8%91%A3%E4%BB%98%E5%9B%BD&type=0
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态