02-5. 心靈控制

https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-red-black-mind-meld-activity/

Computer Science activities with a sense of fun: Mind MeldV1.1, 24 Jan 2015

Created by Paul Curzon, Peter McOwan and Nicola Plant, Queen Mary University of London.

Available from Teaching London Computing: http://teachinglondoncomputing.org

本教材以創用CC 3.0 姓名標示-非商業性-相同方式分享釋出(creative commons 3.0 BY-NC-SA) https://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh_TW

運用你的心靈力量,控制別人的行動!

透過代數的使用,介紹邏輯推理的用途,以證明演算法的實用之處。

在這個單元可以學習到:

  • 運算思維
  • 評價
  • 抽象化
  • 邏輯思考
  • 透過辨證進行測試
  • 電腦與數學之間的連結

活動說明:

1. 我們需要一副撲克牌(不含鬼牌),紙、筆。

2. 隨意將手上的撲克牌洗牌之後,請一位自願者到前面來,將牌分成兩墩。將其中一墩字面朝下,請自願者拿著,先請他不要看牌墩的內容。接著你拿取另一個牌墩,翻轉它讓它字面向上,告訴大家你現在要進行的是一個心靈控制的魔術。

3. 將你手上的牌墩放在桌上,從裡面隨意拿取幾張「黑色」撲克牌,放在牌墩的前方。請自願者不要看牌墩,從裡面隨意選擇同樣數量的牌(牌面向下),放在黑色撲克牌的前面。告訴他,他在不知不覺中已經被你心靈控制了。

4. 重覆一次,這次從你的牌墩任意選擇幾張「紅色」撲克牌,放在牌墩的前方。再請自願者也隨意選擇同樣數量的牌,放在紅色撲克牌的前面。再次告訴他,他已經被你心靈控制。

5. 重覆上面兩個步驟,按照「黑色」「紅色」的順序交替挑出撲克牌,直到你的牌墩的牌全數被挑完為止。

6. 隨意指向你前方字面向上、黑紅交替的牌墩,詢問自願者在你的指示下,各挑出了幾張的牌覆蓋在它們的前面?再次向自願者強調,因為你有心靈控制的力量,現在你要證明這件事。

7. 請自願者翻開那些放在紅色牌墩前方、「覆蓋」著的牌,把裡面的紅色牌挑出來,算算看總數。再請他翻開那些放在黑色牌墩前方、「覆蓋」著的牌,再算一算黑色牌的總數,這個時候會驚奇的發現,竟然兩個顏色牌的數量竟然是一模一樣的!

活動提示:

其實這魔術根本不是心靈控制,它本質上就是個數學的運算遊戲而已。再一次向學生示範魔術中的自我運轉(self-working)範例,只要按照步驟一步一步執行,無論誰來做都會得到相同的結果。為了驗證這個結果,我們需要透過一些數學的代數運算,來為這個魔術技法進行抽象化(abstraction)的動作,為它建立一個數學的模型。

抽象化以及建立一個模型都代表著我們要先將不重要的細節給清除掉。在這個魔術中我們只關心撲克牌的黑色與紅色,點數跟花色完全不重要,所以待會我們先將這些資訊全部隱藏起來。

因為一開始有洗牌跟切成兩個牌墩的動作,我們完全不能確定你的手上與自願者的手上,實際上拿到了多少黑色與紅色的牌,所以我們使用代數(未知數)來表示顏色牌的數量。

用以下的圖為例子,

將你前方字面朝上的所有紅色牌墩的紅色牌總量稱為R1,所以自願者覆蓋著的牌墩,裡面紅色牌的數量為R3、黑色牌的數量為B3

將你前方字面朝上的所有黑色牌墩的黑色牌總量稱為B2,所以自願者覆蓋著的牌墩,裡面紅色牌的數量為R4、黑色牌的數量為B4

一副撲克牌中,紅色、黑色各有26張,所以我們得到數學式為:

第1式:R1 + R3 + R4 = 26

第2式:B2 + B3 + B4 = 26

還記得指示自願者放牌在你的牌墩前的指令嗎?你放了幾張紅色的牌在前面,他就要從自己手上覆蓋幾張牌在前面。因此,我們再得到以下兩個式子:

第3式:R1 = R3 + B3

第4式:B2 = R4 + B4

接著我們就按照在數學科裡面所學的替換方法,將第3式代入第1式取代R1、第4式代入第2式取代B2,得到:

第5式:(R3 + B3) + R3 + R4 = 26

第6式:(R4 + B4) + B3 + B4 = 26

所以在這個時候就可以看出來,第5式的值會等於第6式

(R3 + B3) + R3 + R4 = (R4 + B4) + B3 + B4

重新排列,合併同類項

B3 + R4 + R3 * 2 = B3 + R4 + B4 * 2

運用等量公理,等式的兩邊可以同時刪去B3及R4,因此我們得到了

R3 * 2 = B4 * 2

也就是

R3 = B4

好了,我們終於得到這個結果了。再來複習一次,R3跟B4分別代表什麼意思?

自願者覆蓋著的牌墩之中,紅色牌的數量為R3

自願者覆蓋著的牌墩之中,黑色牌的數量為B4

這也就是我們最後想達到的魔術效果,自願者覆蓋了相同數量的紅色跟黑色撲克牌,不管事先如何洗牌與切牌,結果永遠是這樣的。

程式驗證:

魔術技法不只是演算法的演示,它也可以被視為一支程式。我們預期按照同樣的演算法下去執行步驟,最終一定要得到一樣的結果。但這不能只是設計者本身的空想,必須實地執行並且驗證過。如果我們預期一個給藥系統在護理師按下某個按鈕之後就能給予指定的藥量,那就必須實際進行操作並測試。如果我們預期在飛機進行降落程序時,機師按下一個按鈕,起落架與著地輪就必須伸出並鎖死,那也必需實際操作過,並證明不會有其他突發狀況,才能放行讓飛機出發。

這個魔術運了的是代數等式所推演出來的結果,所以最後的魔術效果一定會是100%的達成率,連99%這種有誤差的情況都不可能會出現。部份的魔術可能因為魔術師的技巧不熟練,或是表演功力不足而導致失誤的出現,但是有些程式是不允許一點點出錯的可能的。像上一段提到兩個例子,無論是一個給藥系統在100次按鍵中出現1次的給藥量失誤,或是100次飛機著地程序中,有1次起落架著地輪無法運作,那後果都會是很恐怖的。

魔術示範:(待拍)