Kata03:目算能力

Kata03地址

顧名思義,目算就是用眼睛計算。

我不是陽炎廚千萬別炸我啊。

目算通常是在編寫代碼前設計方案的時候發動,主要目的是估算程序需要運行的時間和需要占用的空間,并以此作為方案評估的標準之一。

這個Kata就是在鍛煉目算,所以很高興我們又不用寫代碼了。

Kata中提出了兩類問題:How Big和How Fast,也就是計算空間和時間,下面分別列出題目內容。

How Big?

  • 下面這些無符號數字大約需要占用多少二進制位?
    • 1,000
    • 1,000,000
    • 1,000,000,000
    • 1,000,000,000,000
    • 8,000,000,000,000
  • 我的家在東北松花江上啊,那里大約有20000居民,如果每個居民都需要存儲姓名、地址和電話號碼的話,需要多少空間?所有數據都存為字符形式。
  • 要把一百萬個整數存入二叉樹,大約需要多少個節點?二叉樹大約有幾層?如果系統是32位,大約需要多少存儲空間?

How Fast?

  • MFC Windows程序設計大約有1200頁,用我家56k的鐵通寬帶傳需要多長時間?
  • 我的二分查找算法處理一萬個元素大約需要4.5秒,處理十萬個元素大約需要6秒,那處理一千萬個元素需要多長時間?(假設空間足夠)
  • (這段原文太長我只提取中心思想)假設要破解最長為16位的密碼,每位有96種可能性,嘗試一次需要1ms,破解出來大約要多長時間?

知識點

這些內容沒有標準答案,關鍵是思路。我說幾個我認為比較關鍵的知識點供大家參考:

  • 1字節(1B)=8個二進制位(1b),1個字=4字節=32個二進制位,雙字=8字節=64個二進制位
  • 字符按照編碼方式不同占用長度不同,一般英文字符一個占1字節,漢字一個占2字節,大家估算一下即可
  • 二叉樹中每個節點至少要有三個內容:數字和兩個指針,兩個指針分別指向左右孩子節點,所以告訴你32位系統的目的就是計算指針長度
  • MFC Windows程序設計這本書我真有,而且真超過了1000頁,不過好像沒到1200頁,不要在意細節
  • 二分查找復雜度logn,算的時候別直接用比例算
  • 破解密碼的話,MD5理論上無法逆推,但是有各種MD5反查網站,他們會正向計算各種常見密碼的MD5,然后等你查的時候如果他們計算過就知道密碼是什么了
  • 通用的密碼破解方法是彩虹表,和反查MD5原理一樣,暴力計算出所有可能性。不過彩虹表這東西極其大,我上初中的時候電腦硬盤只有40G,當時常用的彩虹表已經過百G了。
  • 我真不是陽炎廚

KB,MB,GB,KiB,MiB,GiB的區別

最后補充一個大知識點。

很多人都遇到過這種情況,買硬盤或者U盤,寫著64G120G,回家一插電腦上發現實際容量會小一點,大家可能不太在意,覺得這是自帶的一些存儲內容占用了空間。其實不是這樣,這是廠家耍的一個小把戲。

我們常說的KB,MB,GB,計算的時候是以10為底的,也就是說1KB其實就等于1000B,但是KiB,MiB,GiB是以2為底的,所以1KiB=1024B,也就是說KB,MB和GB實際上是小于KiB,MiB和GiB的。

廠家標容量的時候都是用KB,MB,GB,但是計算機實際使用的是KiB,MiB和GiB,所以你買的硬盤實際容量會比你想象的小一些。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容