一直不明白為什麼二進位制這麼流行,試想大概就是因為0和1正好表示計算機的開、關或是高、低電平之類的東西;上面的原因卻是沒錯,不過在《aha,insight》裡得到了另乙個更興奮的答案,原來是這樣,茅塞頓開。
乙個簡單的問題:
問題描述大概是這樣,mr. black 和mrs. white的藥店新到了一批藥,一共有10瓶,每瓶裡面裝了上千顆藥丸,每顆藥丸重100毫克;新藥上架後,突然接到通知說其中有一瓶藥有問題,這瓶有問題的藥裡面每顆藥丸都比正常的中了10毫克,先有乙個稱(不是天平),請問要怎麼分辨是哪一瓶藥出了問題?
最笨,也是最容易想到的方法就是從每瓶藥裡面拿一顆藥出來稱,最差的情況就是稱10次,找到有問題的一瓶,可是有沒有更好的方法呢?
答案是肯定的,而且只需要稱一次就搞定,方法如下:
從第一瓶藥裡面拿1顆,從第二瓶藥裡拿2顆,從第三瓶藥裡拿3顆,這樣繼續下去……最後把所有拿出來的藥混在一起稱,得到重量後就能知道是那瓶藥有問題了;原因,假設10瓶藥都沒有問題,那麼我們拿出了55顆藥,重量應該是5500;如果我們得到的重量是5510,證明第一瓶藥有問題,如果得到的重量是5520,則第二瓶藥有問題……,拿出的藥數量相當於給藥瓶編號,每瓶藥有乙個唯一的編號,這樣的策略我們可以稱一次就知道有問題的藥瓶是哪個了。
哈哈,真是靈機一動,可是跟標題的二進位制數有啥關係?別急,看下面乙個難一點的問題:
問題大概跟上面的差不多,只是這次更糟,不是一瓶藥有問題,而是不知道10瓶中有多少瓶有問題。哎喲,這可麻煩了,不能再用上面的策略;但是稱10次絕對沒問題,是不是這次真的要稱這麼多次了呢?
答案還是只需要稱一次,改變點策略就行:
上題的關鍵在於,我們知道只有一瓶有問題,那麼只需要按瓶為區分單位,給每瓶標上唯一的標識,那麼就可以用和來區分具體是那瓶有問題,達到一次就搞定的目的;這次的策略是一樣的,需要通過拿出不同數量的藥丸給瓶子編號,但是因為不知道到底有多少瓶藥有問題,所以編號就不能像之前那樣了,那麼要怎麼做呢?這就需要二進位制數的知識了,我們知道任何非零正整數都能用這樣一串數的和唯一表示出來,1,2,4,8,16...,用二進位制標識,他們剛好是2^0,2^1,2^2,2^3,2^4...(為什麼能,稍微想下吧,因為任何非零正整數都能表示成二進位制數);所以我們可以這樣拿藥丸,從第一瓶裡拿1顆,從第二瓶裡拿2顆,從第三瓶裡拿4顆,從第四瓶裡拿8顆,如此下去,再把所有拿出的藥混合稱一次就知道哪些藥瓶有問題了;這是個等比數列,我們很容易知道在10瓶都沒有問題時,拿出的藥的重量應該是2^9-1,那麼用我們得到的真實重量減去這個標準重量,得到的就是多出來的重量,再轉換成二進位制數後,位上為1的位對應的藥瓶就是有問題的(位上為1,證明對這位做了貢獻,每瓶藥唯一對應能做貢獻的位,比如第一瓶只能對第0位做貢獻,第二瓶只能對第1位做貢獻等等);舉個例子,假設我們得到的差是27,轉換成二進位制就是11011,那麼,就知道是第1、2、4、5瓶有問題了。
這下明白了吧,怪不得二進位制這麼流行,因為它實在太強大了。
我一直堅信計算機是離不開數學的,要學好計算機必須要先學好數學,再在實踐中增加工程類的知識和方法,所以不管周圍人怎麼覺得我怪異,我都會堅持學習數學,再說了,本來就是我的愛好,為啥要放棄?明顯不是我風格,哈哈;另外知識從來不是學出來的,必須通過自己的親身實踐,去做去推敲,在失敗中獲得真知,程式設計強調的多寫,數學亦如此,要多做多總結,有時,在不理解數學問題時,放到現實的具體問題中去,往往能得到意外的收穫,畢竟數學最初就是人們從解決現實問題中總結出來的理論和方法。
哎喲,又碎碎念了一大堆,不過大概找到點回學校要怎麼忽悠別人的方向。
能夠融入數學樂趣中果然比較high,算是無聊工作中的重要調味劑吧,噢,還有我的文藝小生活,明天又有話劇看咯,期待期待。
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...
mysql二進位制 MySql二進位制連線方式詳解
使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...