python合法二進制判定,“好串”求解算法優化原理與Python實現

 2023-10-04 阅读 29 评论 0

摘要:佩服國防科大劉萬偉老師的數學功底與編碼功底,感謝劉老師無私分享!python合法二進制判定、=====正文=======題目要求:稱一個 0-1 串是“好串”,如果它的任何子串不在其中連續出現三次以上。編寫

佩服國防科大劉萬偉老師的數學功底與編碼功底,感謝劉老師無私分享!

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了!

祝所有程序員1024節日快樂

學會提問,你就成功了一大半!

盤點那些讓人上火的提問方式(論如何讓交流更高效)

----------喜大普奔----------

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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/112709.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息