本書是一本專門為程序員而寫的數學書,介紹了程序設計中常用的數學知識。本書門檻不高,不需要讀者精通很多高深的數學知識,只需要讀者具備基本的四則運算、乘方等數學基礎知識和日常生活中的基本邏輯判斷能力即可。本書拒絕枯燥乏味的講解,而是代之以輕松活潑的風格。書中列舉了大量讀者都很熟悉,而且非常有趣的數學實例,并結合程序設計的思維和算法加以剖析,可以訓練讀者的數學思維能力和程序設計能力,進而拓寬讀者的視野,增強職場競爭力。
本書共11章,分別介紹了數據的表示、神奇的素數、遞歸、排列組合、用余數進行數據分組、概率、復利、數理邏輯、推理、幾何圖形構造、統籌規劃等程序設計中常用的數學知識,從而引導讀者深入理解編程中的數學方法和思路。本書包含的實例有結繩記事、孿生素數、梅森素數、哥德巴赫猜想、階乘、漢諾塔、斐波那契數列、乘法原理、加法原理、字符編碼、密碼長度、日歷中的數學、心靈感應魔術、約瑟夫環、智叟分牛、百枚錢幣鼓士氣、莊家的勝率、中獎概率、用概率方法求π值、復利的威力、對折紙張、舍罕王的賞賜、三段論、選言推理、假言推理、關系推理、花盆擺放、殘缺棋盤、丟失的線條、田忌賽馬、背包問題等。
本書適合廣大程序設計人員及數學愛好者閱讀,尤其適合有一定程序設計經驗,但還需要進一步加深對程序設計理解的人員閱讀。本書對IT求職人員、信息學競賽和大學生程序設計競賽等參賽學員也有很好的參考價值。
周穎 畢業于電子科技大學。高級程序員、某軟件公司的技術總監。擅長C和C 語言,對數據結構和算法有深入的研究。長期從事行業軟件設計和團隊管理工作,已十年有余。有著豐富的IT架構設計經驗和行業咨詢經驗。負責過多個大型軟件項目的開發工作。
周穎 畢業于電子科技大學。高級程序員、某軟件公司的技術總監。擅長C和C 語言,對數據結構和算法有深入的研究。長期從事行業軟件設計和團隊管理工作,已十年有余。有著豐富的IT架構設計經驗和行業咨詢經驗。負責過多個大型軟件項目的開發工作。
第1章 數據的表示
1.1 一則童話
1.1.1 0和1的故事
1.1.2 0是什么都沒有?
1.1.3 0的位置
1.1.4 程序中的
1.2 司空見慣的十進制數
1.2.1 遠古的結繩記事
1.2.2 什么是十進制計數
1.2.3 為啥人類習慣十進制
1.2.4 十進制運算規則
1.2.5 十進制數的分解
1.2.6 20!等于多少
1.2.7 大整數構想
1.3 為啥要用二進制
1.3.1 人腦與電腦
1.3.2 二進制計數規則
1.3.3 簡單的二進制運算規則
1.3.4 二進制數的分解
1.3.5 十進制數轉換為二進制數
1.4 還有哪些進制
1.4.1 神奇的八卦:八進制
1.4.2 鐘表使用的十二進制
1.4.3 半斤八兩:十六進制
1.4.4 60年一個甲子:六十進制
1.4.5 各種進制之間的轉換
1.4.6 二進制與八進制、十六進制的轉換
第2章 神奇的素數
2.1 怎么判斷素數
2.1.1 什么是素數
2.1.2 驗證素數
2.1.3 尋找素數的算法
2.1.4 已被證明的素數定理
2.2 孿生素數
2.2.1 什么是孿生素數
2.2.2 孿生素數的公式
2.2.3 中國剩余定理
2.2.4 孿生素數分布情況
2.3 使用素數的RSA算法
2.3.1 什么是RSA
2.3.2 RSA算法基礎
2.3.3 RSA算法實踐
2.3.4 RSA應用:數字簽名
2.3.5 RSA被破解的可能性
2.4 哥德巴赫猜想
2.4.1 哥德巴赫猜想是什么
2.4.2 數值驗證
2.5 梅森素數
2.5.1 什么是梅森素數
2.5.2 已知的梅森素數列表
第3章 遞歸——自己調用自己
3.1 從前有座山,山里有座廟
3.1.1 老和尚講的故事
3.1.2 德羅斯特效應
3.1.3 什么是遞歸
3.1.4 用遞歸能解決哪些問題
3.1.5 一個簡單例子:求最大公約數
3.2 用遞歸計算階乘
3.2.1 階乘該怎么計算
3.2.2 階乘的遞歸計算方法
3.2.3 遞歸的過程
3.2.4 遞歸的本質:縮小問題規模
3.3 漢諾塔
3.3.1 古老的傳說
3.3.2 從兩個盤考慮
3.3.3 找出遞歸結構
3.3.4 實現程序
3.3.5 究竟需要移動多少次
3.4 斐波那契數列
3.4.1 兔子的家族
3.4.2 從最初幾月數據中找規律
3.4.3 斐波那契數列
3.4.4 神奇的魔八方
第4章 排列組合——讓數選邊站隊
4.1 把所有情況都列出來
4.1.1 從0還是1開始
4.1.2 賽程安排
4.2 乘法原理
4.2.1 行程安排的問題
4.2.2 乘法原理適用條件
4.2.3 棋盤上棋子的放法
4.2.4 買彩票保證中獎的方法
4.3 加法原理
4.3.1 仍然是行程問題
4.3.2 總結出的加法原理
4.3.3 骰子出現偶數的次數
4.4 排列與組合的關系
4.4.1 排列
4.4.2 組合
4.4.3 排列與組合的聯系
4.4.4 可重排列
4.5 計算機中的字符編碼
4.5.1 ASCII碼能表示的字符數量
4.5.2 能表示更大范圍的編碼
4.6 密碼的長度
4.6.1 容易破解的密碼
4.6.2 多長的密碼才安全
4.6.3 密碼中使用的字符數量也很關鍵
第5章 余數——數據分組
5.1 復習小學的余數
5.1.1 自然數的余數
5.1.2 余數的性質
5.1.3 用余數進行分組
5.2 日歷中的數學
5.2.1 n天后是星期幾
5.2.2 下月的今天是星期幾
5.2.3 10年后的“今天”是星期幾
5.3 心靈感應魔術
5.3.1 一個小魔術
5.3.2 魔術師是怎么猜出來的
5.4 奇偶校驗
5.4.1 不可靠的網絡傳輸
5.4.2 用奇偶校驗檢查錯誤
5.5 呂洞賓不能坐首位
5.5.1 座位安排
5.5.2 試排座位找規律
5.5.3 西方的約瑟夫環
5.5.4 用數學方法解約瑟夫環
5.6 智叟分牛
5.6.1 遺產分配難題
5.6.2 智叟給出的分配方案
5.6.3 分配原理
第6章 概率——你運氣好嗎
6.1 初中學習過的概率
6.1.1 誰先開球
6.1.2 用程序模擬拋硬幣
6.1.3 什么是概率
6.1.4 必然事件與不可能事件
6.1.5 概率的基本性質
6.2 百枚錢幣鼓士氣
6.2.1 狄青的計謀
6.2.2 全為正面的概率是多少
6.2.3 必然還是偶然
6.3 莊家的勝率是多少
6.3.1 一個看似公平的游戲
6.3.2 莊家能贏錢嗎
6.3.3 莊家盈利比率
6.3.4 游戲參與者獲勝的概率
6.4 你能中獎嗎
6.4.1 想中大獎嗎
6.4.2 計算中獎概率
6.5 漁塘中有多少條魚
6.5.1 該怎么估算漁塘中的魚
6.5.2 用概率來估算
6.5.3 用概率方法求π值
第7章 翻一番是多少
7.1 翻番的概念
7.1.1 什么是翻番
7.1.2 翻倍的概念
7.1.3 計算倍數和番數
7.2 復利的威力
7.2.1 利潤——投資回報
7.2.2 認識單利
7.2.3 認識復利
7.2.4 計算投資回報的程序
7.2.5 忘還錢的信用卡
7.2.6 愛因斯坦的72法則
7.3 對折紙張
7.3.1 有趣的問題:紙張對折
7.3.2 100米長的紙能對折幾次
7.3.3 計算對折次數的程序
7.4 一棋盤的麥子
7.4.1 舍罕王的賞賜
7.4.2 需要多少麥粒
7.5 折半法的運用
7.5.1 翻番的逆運算
7.5.2 找出假硬幣
7.5.3 編寫程序找出假硬幣
7.5.4 折半法在查找中的應用
第8章 數理邏輯——非此即彼
8.1 邏輯的重要性
8.1.1 模棱兩可的表述
8.1.2 肯定或否定
8.1.3 程序中的邏輯判斷
8.2 命題邏輯
8.2.1 什么是命題
8.2.2 命題的邏輯形式
8.2.3 簡單命題
8.2.4 復合命題
8.2.5 復合命題的聯結詞
8.3 布爾邏輯
8.3.1 邏輯或
8.3.2 邏輯與
8.3.3 邏輯非
8.3.4 邏輯異或
8.3.5 二進制位運算
8.4 考慮到各種可能了嗎
8.4.1 邏輯重疊的實例
8.4.2 邏輯遺漏的實例
8.4.3 用數軸確定邊界
8.5 用卡諾圖簡化邏輯函數
8.5.1 什么是卡諾圖
8.5.2 三變量卡諾圖
8.5.3 四變量卡諾圖
8.5.4 卡諾圖化簡
8.5.5 卡諾圖中的相鄰
第9章 推理——邏輯的應用
9.1 演繹推理
9.1.1 認識演繹推理點
9.1.2 三段論
9.1.3 選言推理
9.1.4 假言推理
9.1.5 關系推理
9.1.6 演繹推理綜合實例
9.2 歸納推理
9.2.1 什么是歸納推理
9.2.2 完全歸納推理
9.2.3 不完全歸納推理
9.3 足球比賽的得分
9.3.1 粗心的記分員
9.3.2 從已有數據推算出比分
第10章 幾何圖形構造
10.1 花盆擺放問題
10.1.1 10盆花擺成5行,每行4盆
10.1.2 轉變思路,找出答案
10.1.3 升級問題(10盆花擺10行,每行3盆)
10.2 殘缺的棋盤能補上嗎?
10.2.1 被切割的棋盤
10.2.2 能拼接出殘缺棋盤嗎
10.3 線條哪里去了?
10.3.1 神奇的魔術
10.3.2 解析丟失的線條
10.4 圖形剪拼
10.4.1 均分三角形
10.4.2 拼接正方形
第11章 統籌規劃
11.1 認識統籌規劃
11.1.1 田忌賽馬
11.1.2 為什么會贏
11.2 生活中的統籌規劃
11.2.1 匆忙的早晨
11.2.2 如何節約運輸成本
11.3 著名的背包問題
11.3.1 什么是背包問題
11.3.2 用遞歸程序解決背包問題
11.3.3 用窮舉法解決背包問題
第1章 數據的表示
數學古稱算學,是中國古代科學中一門重要的學科。根據中國古代數學發展的特點,可以分為5個時期,分別是萌芽、體系的形成、發展、繁榮和中西方數學的融合。
在數學的不同發展階段,對于數據的表示都有一些不同的形式。從遠古的結繩記數,到現在用計算機等現代科技設計記數,數的表示形式也在逐步演化。
本章主要介紹數據的各種表示形式,包括各種進制及進制之間的轉換。
1.1 一 則 童 話
根據我們所學的知識可知道,數據通常是用0、1、2、3、4、5、6、7、8、9這些數來表示,由這些數的不同組合表示現實生活中各種各樣的數據。首先來看這個數列中的前兩個數:0和1,從通常意義來說,0就是什么也沒有,真的是這樣嗎?對程度員來說不應該這樣理解。
先來看這樣一個問題,0和1誰大?
1.1.1 0和1的故事
在數學王國里,胖子0與瘦子1常常為了誰大而爭執不休。瞧!今天,這兩個小冤家狹路相逢,彼此之間又展開了一場舌戰。
瘦子1搶先發言:“哼!胖胖的0,你有什么了不起?就像100,如果沒有我這個瘦子1,你這兩個胖0有什么用?”
胖子0不服氣了:“你也甭在我面前耍威風,想想看,要是沒有我,你就只是一個光桿呢?”
“喲!”1不甘示弱,“你再神氣也不過是表示什么也沒有,看!1+0還不等于我本身,你哪點兒派得上用場啦?”
“去!1×0結果也還不是我,你1不也同樣沒用!”0針鋒相對。
“你……”1頓了頓,隨機應變道,“不管怎么說,你0就是表示什么也沒有!”
“這就是你見識少了。”0不慌不忙地說,“你看,日常生活中,氣溫0度,難道是沒有溫度嗎?再比如,直尺上沒有我作為起點,哪有你1呢?”
“再怎么比,我始終比你大。”1信心十足地說。
聽了這話,0更顯得理直氣壯地說:“嘿嘿,你的大小還得我說了算,我站你左邊,你就成0.1,我站你右邊你就是10。怎么樣?我可讓你放大10倍,也可讓你縮小10倍!”
眼看著胖子0與瘦子1爭得臉紅耳赤,誰也不讓誰,一旁觀戰的其他數字們都十分 著急。
這時,9靈機一動,上前做了個暫停的手勢:“你倆都別爭了,瞧你們,1、0有哪個數比我大?”
“這……”胖子0、瘦子1啞口無言。
這時,9才心平氣和地說:“1、0,其實,只要你們站在一塊,不就比我大了嗎?”
1、0面面相覷,半晌才搔搔頭笑了。“這才對嘛!把自己的位置放正,就能起到應有的作用”。9語重心長地說。
從以上故事可看出以下兩點:
0并不表示什么都沒有。
數的大小與所處的位置有關系。
下面就來討論這兩個問題。
1.1.2 0是什么都沒有?
通常意義上,0表示“沒有”的意思。例如,“2012年過去了,可我的收獲為零!”這就表示在2012年沒有收獲。
但是,0真表示什么都沒有嗎?
其實,0不僅表示什么都沒有,它還有更豐富的內涵。例如,0度并不是沒有溫度,而是表示溫度為0度,比零下1度高,比1度低,如圖1-1所示。
圖1-1
在日常生活的常用語中,也有很多用0來表示的,如“很多女孩子都喜歡吃零食”,這里的“零食”并不是表示沒有“食”,如圖1-2所示。
圖1-2
“為了增加收入,改善生活,很多程序員在業余時間都會接點零活來做。”這里的“零活”并不是沒有“活”。
其實,在數學上,0也并不是表示沒有。例如,8和8.0相等嗎?其含義相同嗎?
看起來在小數點后添加一個0是沒有意義的,不過,其含義實際是不相同的。在近似數表示中,數字8表示數據只精確到個位,如7.9、8.2等數精確到個位都表示為8。而8.0表示數據精確到十分位,如8.02、7.99等數精確到十分位都表示為8.0。所以,從這個角度來看,8和8.0是不相等的。
1.1.3 0的位置
從“0和1的故事”可看出,當0所處的位置不同時,其含義也不一樣。如前面說的8和8.0,當把0放在小數點后面時,從絕對值方面來看,兩個數是相等的,但從近似數來看,小數點后多了一個0,其表示的含義也就不一樣了。
那么,在小數點左側添加0呢?如果在數的最左側添加0,無論添加多少個0,數的大小都不變。
但是,如果在數的中間插入0,數的位置與數的大小關系就很明顯了,如在18的中間插入一個0,得到的是108,很明顯,其大小差別很大。
對于18,表示十位為1,個位為8,也就是說,表示18這個數有1個10,8個1。而108,表示百位為1,十位為0,個位為8,即表示有1個100,0個10,8個1,這時的0是一個占位符,把1從十位擠到百位。
而如果在緊鄰小數點的左側添加0,則數據會擴大10倍。
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。