# AP325-Python 自序 程設資結迷惘,算法遞迴如夢,冷月豈可葬編程,柳絮靜待東風。 鄭愁予:「我打江南走過,那等在季節裏的容顏如蓮花的開落,東風不來,三月的柳絮不飛,你的心如小小寂寞的城,…」直到遇上了程式,……。 --- ## 原C\++版自序 寫書最難的是:不知道在跟誰說話。而教學最重要的是:見人說人話,見鬼說鬼話,意思是要用對方可以聽得懂的方式來解釋新的觀念與技術,演算法更是如此,因為演算法每個步驟要詳細到什麼程度沒有固定的表達方式。 這一份教材設定的讀者對象是已經對基礎的程式語法與架構有所了解,而教材的目的是透過解題的方式來介紹一些資料結構的使用與演算法的思考方式。以APCS實作題檢測的程度來說,教材的對象就是從三級分要進步到五級分的人,或者說是學會基礎程式後想要進入程式競賽的人。教材的主要內容是題目與解題的說明,每一個單元的前面也會有一些基礎知識的說明。雖然是解題為主的教材,但並不是去網路上蒐集題目與題解,而是判斷需要什麼才放什麼。因為也考慮對競賽程式有興趣的入門者,在選題目還是遭遇了一些取捨的困擾,後來有一些超過APCS範圍的題材也選了進來。除了一部份標註來源的題目之外,其餘的題目大部分都是常用來教學的題目與經典題,所以都沒有標註來源的問題,程式碼都是我自己寫的,也沒有標註來源的問題。 這份教材的一個好處是所有的題目都附了測資,讀者可以測試自己的程式。因為不想占用太大的空間,幾乎每個題目都只有放五筆測資,其實例題的測資產生程式都附在資料夾中,需要的人可以自己產生測資,部份題目我也放了效率較差的程式。理論上測資不可能防所有的假解,依我的判斷,在合理的狀況下這些測資都夠強了,當然,難免有意外發生的可能。對大部分的題目,時間限制都有很大的寬容度,效率好壞的算法差距應該都在幾十倍以上,但有少部份題目的差距沒這麼大,所以讀者必須自己判斷一下,尤其是要把題目放上裁判系統的人。 倉促之間,錯誤難免,有問題歡迎反映給我。 作者:吳邦一,2020/8/7 有關版權:本教材歡迎分享使用,但未經同意不得做為商業出版與使用。 ## Python版自序 2020年寫完AP325之後,我針對Python初學者撰寫與錄製了二三級的教材,也寫了或錄製了不少APCS考古題的題解,2023年我也寫了Python-LeetCode 581的系列筆記,這些教學資源可以在臉書社團[APCS實作題檢測](https://www.facebook.com/groups/359446638362710/)中找到,或者在 [吳邦一的APCS題解目錄](/878tQBGTQ32nqlowAhCy3Q) 中找到。 一直有些讀者反映給我希望能有AP325的Python版本,我也一直在猶豫是否有此需,畢竟如果要進入競程還是以C\++為上選,用Python可以考APCS,也可以學習算法,但是到了程式比賽就不適合了,畢竟Python的時間效能太差,不適合程式競賽,我一度認為用一個跑的慢的語言去追求跑的快的結果是一件奇怪的事情。 在2023年12月完成Python-LeetCode 581的系列筆記之後,我對這事情的看法稍有改變,並非所有人學習算法都是為了程式比賽,AP325也不必把讀者侷限在中學生,它也適合其它想學習演算法實作的人,而用Python來學習算法也是很好的方式。 AP325中所包含的演算法知識其實是Python-LeetCode 581系列筆記的子集合,只是兩者題目的取材對象不同,前者是APCS的題目為主,後者是LeetCode的題目。不過對剛入門的人來說,一個比較小範圍的教材,可能還是有需要的。 我從2023年12月初開始動工,在2024/1/12初步完工。 在AP325的Python版中,我決定保留所有原來的例題與習題與原(C\++)版本一致,但有幾件事請讀者留意: 1. 有少部分題目的測資有修改,主要是滿足教學的需要,例如讓遞迴不至於過深。 2. 原版中有些超過APCS考試範圍的題目,當初是為了對競程有興趣的讀者而選入的,這些題目在C\++的環境下是合理可解的。但其中有少部分題目在APCS的Python環境下,不是合理可解的,也就是必須用到非標準函數庫中的資料結構。這些題目只是留給有興趣的讀者參考,讀者可自行略過。 3. 例題與習題中所訂的執行時限是以筆者測試的時間略加放寬來設定,Python程式的執行時間受環境影響很大,相同演算法的不同撰寫方式往往也有頗大差異,讀者需自行斟酌。 此外,原版所附的資料中,例題有附範例程式而習題沒有附範例程式,但在本版所附的資料夾中,所有的題目都附有範例程式。 倉促之間,疏漏難免,敬請見諒。 (2024/1/12) --- 作者介紹:筆者吳邦一,學術專長為演算法的退休教授([學術著作](https://scholar.google.com.tw/citations?user=a0wbKRAAAAAJ&hl=en)),曾經參與程式比賽相關工作多年。 2022年筆者榮登「全球前2%頂尖科學家(World’s Top 2% Scientists 2021)」榜單,為「學術生涯科學影響力(1960-2021)」入榜學者之一[(中正新聞)](https://www.ccu.edu.tw/p/406-1000-26995,r983.php?Lang=zh-tw)。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up