日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入探讨编程到底需要知道多少数学知识

發布時間:2023/12/4 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入探讨编程到底需要知道多少数学知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全世界只有3.14 %?的人關注了

數據與算法之美


這篇文章中我會深入探討編程中所需要的數學知識。你可能已經都知道了。


對于基本的編程,你需要知道下面的:


  • 加減乘除?— 實際上,電腦會幫你作加減乘除運算。你僅需要知道什么時候運用它們。

  • 模運算?— 模運算是用來計算余數,它的符號通常用%百分號來表示。所以23除以7等于3,余數是2。23 mod 7 = 2。

  • 判斷是奇數還是偶數的模運算?— 如果你想知道一個數是奇數還是偶數,用它mod 2來作模運算。如果結果是0,它就是偶數。如果結果是1,就是奇數。23 mod 2等于1,所以23是奇數,24 mod 2等于0,24是偶數。

  • 對一個數作百分數運算,就是用這個數來乘以一個百分數。譬如你要得到279的54%,就是用0。54*279。這就意味著為什么1.0等于100%,0.0等于0%。

  • 知道負數是什么。負數乘以負數等于正數。負數乘以正數等于負數。就這么簡單。

  • 知道笛卡爾坐標系統。在編程中,(0,0)代表屏幕左上角,Y坐標的正軸往下。

  • 知道勾股定律,因為它是用來計算笛卡爾坐標中兩點之間的距離的。勾股定律a^2 + b^2 = c^2。(x1, y1)和(x2, y2)兩點之間的距離等于( (x1 – x2)^2 + (y1 – y2)^2 )。

  • 知道十進制、二進制、十六進制。十進制就是我們通常用的十個數:0-9。通常認為這個十進制系統是人類發明的,因為我們有十個手指。


電腦采用二進制數據,只有兩個數字:0和1。這是因為我們用電子元件來構建的電腦,讓電腦只識別兩種狀態更便宜些(一種代表0,另一種代表1)


數是一樣的,但是在不同的進制系統里的表現形式不同,因為不同進制包含的數的個數不同。十六進制比十進制多六個數字,所以我們用A-F表示超過9的數。能夠表現這些進制系統的最簡單方法就是用一個計數器(odometer)。下面三種不同的計數器顯示的是同一個數,但在不同的進制系統中的形式不同:



在新窗口中查看計數器頁面


你甚至不需要知道怎么從一個進制系統轉換成另一個系統。每種編程語言都有幫你轉換的函數。

提示一下,十六進制的使用是因為一個十六進制的數可以表示四個二進制的數。

因為十六進制中的3和二進制中的0011對應,十六進制的A和二進制的1010對應,所以十六進制中的3A(十進制的58)可以寫成二進制的00111010。

十六進制在編程中的使用是因為它是對二進制的簡化。沒人喜歡寫出的數全是0和1。


就是這么多了。除了進制系統以外,你可以已經知道編程所需的數學知識了。雖然普遍認為編程需要學習許多數學,但實際上并不需要那么多。你可能為了編寫一個程序,譬如說地震模擬器,而需要學習數學。其實你更需要學習地震的數學,而不是因為要編寫地震模擬器而學習數學。


某些編程領域中更為高級的數學


有一些領域中需要更多的數學知識(但95%的軟件中,你都不需要知道它們。)


  • 3D游戲和3D繪圖 — 3D通常需要涉及三角函數和線性代數(用矩陣來解決問題的數學)。當然,有許多3D圖形庫已經實現了這些數學編程,你不需要知道這些數學。


  • 2D物理(譬如憤怒的小鳥)和3D物理(譬如許多流行的3D游戲) — 為了寫涉及到物理的編程,你需要學習一些物理方程和公式(尤其是力學,如彈力,重力,球滾下斜坡等物理。)然而,已經有一些物理引擎和軟件庫幫你實現了,所以你也不需要知道游戲(如憤怒的小鳥)中的物理公式。


  • 加密學 — 事實上我指的是RSA。你需要知道質數的有關知識,以及如何求最大公約數(其實是個非常簡單的算法,還有許多編程語言中都有gcd()函數,幫你求解最大公約數)其他的編碼大部分就是將數據按照某種步驟挪動。舉個例子,下面的flash就是AES“Rijndael”編碼的步驟。所有的步驟包含用一些數減去另一些數,將行向上移,將列數字打亂,再作簡單的加法運算。


如果你要寫你自己的加密算法(通常不需要你做,因為已經有許多很好的工具了,并且如果你不是加密學的專家的話,你的程序也許會很容易被破解。)如果你僅僅想加密一些數據的話,已經有許多加密和解密的軟件庫了。


所以就算是以上的情況,你也不需要真正的知道3D圖像,物理或者加密的數學。你只需要學習運用軟件庫就行了。


編程需要學習什么?


你需要學習的是如何建模和設計算法。這意味著,如何將真實世界的運算或者數據處理抽象出來,寫出代碼,讓計算機來幫你運算。例如,在游戲“龍與地下城”(Dungeons and Dragons)中,角色和怪獸都有許多不同的戰斗統計值:


  • 生命值(Hit points)是一個人死前所能經受的傷害值。越高的生命值就意味著可以經受更多的傷害。


  • 防御等級(armor class)是對你的武器防御能力的量度。防御值越低,武器的防御能力越高。


  • THAC0(讀作“thay-co”,“To Hit Armor Class 0”),是對一個人進行有效攻擊的能力的測量。THAC0值越低,攻擊越準。


  • 武器的攻擊力用類似1d6+2來表示,它表示搖一個六面骰得到的值,然后再加2。2d4就是搖2個4面骰,然后將它們相加。(“龍與地下城”采用的是4,6,8,10,12和20面骰。)



要看攻擊者打防御者,讓攻擊者搖動一個20面骰。如果這個數字大于或等于攻擊者的THAC0減去防御者的防御能力,那么這個攻擊就成功,防御者將受到傷害。不然,防御者就阻擊了這個攻擊,并且不費血。


我們假設兩個人物,Alice和Bob,她們具有以下值:


  • Alice: HP 14, AC 5, THAC0 18, DAMAGE 1d6


  • Bob: HP 12, AC 7, THAC0 16, DAMAGE 2d4


所以Alice有更多的生命值和防御力(記住,AC越低越好)。但是Bob更可能成功擊中對方(記住,THAC0越低越好),并造成更多的傷害。我們說Bob的攻擊力更強是因為2d4可以造成2-8點傷害,而Alice的1d6只能造成1-6點傷害。(如果你懂統計學,你可以計算出Bob的期望傷害值是5,比Alice的3。5要高。)


你會打賭Alice或者Bob會贏得比賽對嗎?很難講誰會贏,他們看起來勢均力敵。盡管可能你的統計學學得很好,但做這個計算將會十分頭疼。編寫“龍與地下城”的程序(模擬戰斗過程),你甚至不需要知道統計學。僅僅需要運行幾百次或者幾千次戰斗,看看誰贏得更多。

Alice 贏得12909 (43.03%)次戰斗. Bob贏得17091 (56.97%)戰斗。


所以我們看到使用上面的數值,Bob稍稍占先。電腦進行了30,000次戰斗模擬。如果我們用筆和紙還有骰來進行30000次戰斗模擬的話,可能需要幾個月來算出結果,而我的筆記本僅用了8秒。


那么如果Alice的生命值從14增加到20呢。誰會贏呢?

Alice贏得19438 (64.79%)次戰斗. Bob贏得10562 (35.21%)次戰斗.


我們看到給Alice增加6點生命值,結果倒過來了,Alice占先了。那么如果Alice的生命值只是增加到16呢?

Alice贏得15176 (50.59%)次戰斗啊. Bob贏得14824 (49.41%)次戰斗.


所以僅僅增加2個生命值,就已經足夠扳回Bob更強攻擊力的勝算。


來看這個程序,它只用了加減乘除來計算一個百分比。甚至在更復雜的程序中,需要表示magic spells,治愈部位,多次攻擊,在戰斗中切換武器等不同效果時,我們也不需要知道更多的數學了。


當然,去學更多的數學吧。可以讓你成為更出色的程序員。但是為了學習編程需要多少數學?真的非常少。


更新:我想我應該在基本知識點中增加基本代數,但僅僅需要知道的如 如果X * 3 = 12,知道X等于4。


雖然大多數開發人員會告訴你,他們在工作中從來不需要數學,但是經過一番沉思后,我有了個想法:


就是反馬斯洛的錘子理論——當你有一把錘子,你會把一切看成是釘子。推薦閱讀《程序員數學》


精品課程推薦:

選購數學科普正版讀物

嚴選“數學思維好物”

送給孩子的益智禮物? ?| ??辦公室神器

算法工程師成長閱讀? ?| ??居家高科技

理工科男女實用型禮物精選? ?


數據與算法之美

用數據解決不可能




長按掃碼關注

總結

以上是生活随笔為你收集整理的深入探讨编程到底需要知道多少数学知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。