對映是乙個很簡單很實用的數學技巧,用得好經常能達到清晰明了的效果。
其中,對映到整數是經常用到的。
對映簡單的離散量比較平凡,如果對映能結合序列可以做到很不一般的效果。
比如最近做過的一道題目:1000瓶水,其中一瓶有毒,小白鼠喝了乙個星期死亡,要多少只小白鼠才能在乙個星期內找到這瓶水?
思路一、1000瓶水對映到小白鼠,大概就要1000個吧,死哪個老鼠,自然知道是哪一瓶水。
思路二、以上對映做得很基礎,得到的答案雖然是對的,但答案比題目要求的要多很多資訊。題目要求知道那一瓶水有毒,需要知道的是一瓶的情況,而不是1000瓶的狀態是有毒還是沒毒的。這裡面沒有充分利用「只有一瓶有毒」這個資訊。
要知道哪一瓶有毒,關鍵是如何識別這個瓶號,瓶號對映到小白鼠的狀態之下便可。
小白鼠的狀態只有兩種:一種是喝了這瓶水,一種是沒有喝這瓶水;即0或者1. 那麼解題的思路就是將1000對映到0,1這個狀態之上,單個0,1當然無法表示1000這麼大的數,因此就需要組合乙個0,1序列,就類似二進位制編碼的方式。狀態單元是2,k個狀態單元可表示的數是2^k 。2^10=1024 > 1000, 因此只需要k>=10便能對映0~1000的不同編碼。也就是只需要10個小老鼠。
例:礦泉水瓶1,2,3,4,5,6,7,8,
老鼠a:01010101
老鼠b: 00110011
老鼠c: 00001111
0表示不喝,1表示喝,將老鼠abc對應的數字連起來會發現這個編碼是獨一無二的,也就是任何一瓶有毒,會死掉的老鼠的組合都是不同的,也許死乙隻,也許死兩隻,也許乙隻不死,總之必然不同。根據老鼠死掉的情況,翻查這個**就能知道是哪瓶有毒了。因此,也就是達到對映的效果。
要點總結:
一、找到關聯點,老鼠喝水,中毒死亡
二、是否找唯一性,如1000瓶中的一瓶
三、狀態單元是什麼?老鼠喝水,和沒喝水
四、如何組合狀態單元?這裡關聯唯一性用進製編碼的方式頗為有效。
題目二:有27個鐵球中有乙個比較輕,用天平3次找出這個球,有什麼方法?
思路一、一次排除一半可能是大多數人想到的第一種方式。
思路二、一次可排除2/3。首先分成3部分,稱重,如果相同,自然剩下那一組;如果不同,自然是輕的那一組。
思路三、在稱一次後,鐵球有三種狀態,要麼是可能輕的,要麼是可能重的,要麼是標準球(平凡球)。
其中0是輕的,1是重的,2是標準的,這道題1也是標準的。以上是第一輪的可能結果。
稱a:000000000111111111222222222
稱b:000111222000111222000111222
稱c:012012012012012012012012012
以上是三次稱了之後的典型結果(其他結果必然不比這個要難,即可以變形到這個結果或者比這個結果要容易)。
首輪是將27個分三份稱,做好標記(0,1,2),第二輪是將這三份每一小份再分三小份,不同組各取乙份放一邊,各取另乙份放另一邊稱。第三輪依此類推,繼續將每一小份分三份,結合這三次的每個球的編碼都是不同的。這有什麼用?說明每乙個球都已經和稱的結果一一對應起來了,特殊球必然也被唯一的結果所對應。
問題哪個結果才是對應特殊球的?因為每個球的編碼都是不同,也就是任意乙個球的稱重都是確定的,要麼是標準球,要麼就是重球(也是標準球)。而乙個輕球不會變成乙個重球,乙個重球也不會變成乙個輕球,那些變動的數碼,說明了它不是不是特殊球,而是被特殊球影響到稱重結果的標準球(如特殊球在同一邊導致它變輕,在另一邊導致它變重)。始終不變的球只有兩個,000和111。根據題意,輕的是我們要找的特殊球。
要點總結:
一、題目提到「3」是解題的突破點,為何3次就能解決這個問題?27/3=9/3=3=1,自然而然就會聯想起把球和稱重結果對應起來。
題目三:有12個球中有一壞球和其他球不一致,用天枰3次找出這個球,有什麼方法?
稱a:000011112222
構造:02220011,011
稱b: 00001111
構造:0122,1
稱c: 1100
稱a的結果需要匯入標準球2,構造成三部分00,011,011,任意一部分都能一次稱完得到結果。
02220011稱得到0001111得到數碼不變的011這個結果(其中乙個,其他類似)。
然後匯入標準球構造成兩部分,01,1。
0122稱得到1100.即1是最終的結果,是重球。
有關DLL的幾個問題
一 dll被多個程序呼叫問題 win32系統會確保記憶體中只有乙個該dll的拷貝,這是通過記憶體對映檔案來實現的。不同的程序分別將這份dll的 段位址對映到自己的程序空間中,同時不同的程序在自己的程序空間分別有各自的乙份該dll的資料段拷貝。這是因為,在win32環境中,每個程序都有了它自己的位址空...
有關c 的幾個問題
1.在物件導向中既然結構體中可以有成員變數也可以有方法等,那為什麼還要有類的存在呢?結構體是值型別,而類是引用型別。然後就是值型別和引用型別之間的區別了。2.string 和 string 有何區別?通過typeof 的測試可以發現兩者的結果都是 system.string 型別。其實 string...
有關Xshell的幾個問題
用xshell登入虛擬機器中的kali系統時,有時會出現登入不上,但你之前是能成功登入上的,此時,你因該從以下幾點考慮以下 1.sshd服務是否開啟 我用service sshd start 是無法開啟的,同時這條命令也不能很好的執行下去,我用的命令是 etc init.d ssh start 或 ...