首页
/
每日頭條
/
科技
/
二叉樹常考算法
二叉樹常考算法
更新时间:2025-12-14 01:52:32

二叉樹常考算法?古印度有個叫錫塔的大臣,他聰明過人,發明了一種棋子,國王百玩不厭,于是決定重賞錫塔錫塔說:“陛下,我隻要一點麥子請您讓人将麥子放在我發明的棋盤的六十四個格子内,第一格放一粒,第二格放二粒,第三格放四粒,第四格放八粒,第五格放十六粒……照這樣放下去,每格比前一格多放一倍麥粒,直到把六十四個棋格放滿就行了”國王聽了哈哈大笑,他覺得谷倉裡的麥子多着呢,填完六十四個棋格實在是小意思哪知,管糧食的大臣計算了一下,急得滿頭大汗,因為需要的麥子太多了,我來為大家科普一下關于二叉樹常考算法?以下内容希望對你有幫助!

二叉樹常考算法(趣味數學與編程)1

二叉樹常考算法

1 印度國王賜麥

古印度有個叫錫塔的大臣,他聰明過人,發明了一種棋子,國王百玩不厭,于是決定重賞錫塔。錫塔說:“陛下,我隻要一點麥子。請您讓人将麥子放在我發明的棋盤的六十四個格子内,第一格放一粒,第二格放二粒,第三格放四粒,第四格放八粒,第五格放十六粒……照這樣放下去,每格比前一格多放一倍麥粒,直到把六十四個棋格放滿就行了。”國王聽了哈哈大笑,他覺得谷倉裡的麥子多着呢,填完六十四個棋格實在是小意思。哪知,管糧食的大臣計算了一下,急得滿頭大汗,因為需要的麥子太多了。

事實上依格子順序放的麥粒數是一個等比數列:

1 2 4 8 16 32 …… 2^63。

下面來推導等比數列前n項和S的公式。設第一項為a,公比為q,則等比數列可表示為:

如果按1立方米的麥子有1500萬粒計算,國王應賞賜的麥子就約有12000億立方米,就算把全世界2000年所産生的麥子全加在一起,也沒有這個數目大呀!國王這才明白過來,這可怎麼辦呀?一個聰明的大臣對國王說:“陛下,就請錫塔自己去數麥子吧。”因為一秒鐘能數兩粒,一分鐘能數120粒,一小時也隻能數出7200粒,每天數上10小時,也隻能拿到72000粒麥子。照這樣的速度數上一年,也隻有2000萬粒——3000萬粒,也就是1—2立方米的麥子。而要想把國王如數上次給他的麥子全部數清,就得要2000億年呢!聰明的錫塔無法數完麥子隻能放棄了賞賜。

2 電腦的位數與支持的内存

先從世界人口說起。據統計,現在世界人口約75億,如果說給每人一個不重複的編号(隻使用0和1兩個符号),需要多少位數?

2^x = 7500000000

也就是求以2為底7500000000的log。

2^32 = 4294967296

2^33 = 8589934592

33個二進制位就夠了。

32位電腦有32條地址線,支持的内存是2的32次方,也就是4GB内存(1GB = 1024^3)。4GB也就是40多億個Byte。

而64位電腦理論上的尋址空間為2的64次方,達18446744073709551616,也就是17179869184G。

64位的CPU需要64位的操作系統支持。當然64位的系統也支持32位的CPU。

如果主闆有四條内存插槽為,單條内存最大的是16GB,四個内存插槽剛好可以插16x4=64GB内存。

如大部分X99/X399主闆都支持8内存插槽,用單條16G的,就是128GB内存了。

3 兩次遞歸調用,就是二叉樹的遍曆問題

如漢諾塔問題:

void han(int n,char a,char b,char c) { if(n==1) printf("%d %c→%c *\n",n,a,c); else { han(n-1,a,c,b); printf("%d %c→%c\n",n,a,c); han(n-1,b,a,c); } }

可圖示如下:

兩叉樹的擴充就是一個翻倍的問題,1,2,4,8,……,2^n

移動的最少次數應等于2^n - 1

4 貪财的富翁

一個百萬富翁遇到一個陌生人,陌生人找他談一個換錢的計劃,該計劃如下:

第一天給我你十萬元,而你第一天隻需給我一分錢,

第二天我仍給你十萬元,你給我兩分錢,

第三天我仍給你十萬元,你給我四分錢,....,

你每天給我的錢是前一天的兩倍,直到滿一個月(30天)。

百萬富翁很高興,欣然接受了這個契約。請編程序,通過計算說明,這個換錢計劃對百萬富翁是否是個劃算的交易。

#include <stdio.h> int main( ) { double m2f=1.0e5,f2m=0.01,m2fs=0,f2ms=0; int day=1;//一定要賦初值 for(day=1; day<=30; day ) { m2fs =m2f; f2ms =f2m; f2m*=2; //下面的輸出不是必需,但可以使我們更加清楚地知道解題的過程,這可以是一個技巧 printf("第%d天,陌生人給富翁累計%.2f,富翁給陌生人累計%.2f,差額:%.2f\n", day, m2fs, f2ms, m2fs-f2ms); } printf("最終,陌生人給富翁:%.2f,富翁給陌生人:%.2f。 ", m2fs, f2ms); if(m2fs>f2ms) printf("陌生人自找"); else { if (m2fs<f2ms) printf("富翁傻帽了"); else printf("兩人持平,沒意思的交易"); } printf("\n"); while(1); return 0; }

輸出:

第1天,陌生人給富翁累計100000.00,富翁給陌生人累計0.01,差額:99999.99

第2天,陌生人給富翁累計200000.00,富翁給陌生人累計0.03,差額:199999.97

第3天,陌生人給富翁累計300000.00,富翁給陌生人累計0.07,差額:299999.93

第4天,陌生人給富翁累計400000.00,富翁給陌生人累計0.15,差額:399999.85

第5天,陌生人給富翁累計500000.00,富翁給陌生人累計0.31,差額:499999.69

第6天,陌生人給富翁累計600000.00,富翁給陌生人累計0.63,差額:599999.37

第7天,陌生人給富翁累計700000.00,富翁給陌生人累計1.27,差額:699998.73

第8天,陌生人給富翁累計800000.00,富翁給陌生人累計2.55,差額:799997.45

第9天,陌生人給富翁累計900000.00,富翁給陌生人累計5.11,差額:899994.89

第10天,陌生人給富翁累計1000000.00,富翁給陌生人累計10.23,差額:999989.77

第11天,陌生人給富翁累計1100000.00,富翁給陌生人累計20.47,差額:1099979.53

第12天,陌生人給富翁累計1200000.00,富翁給陌生人累計40.95,差額:1199959.05

第13天,陌生人給富翁累計1300000.00,富翁給陌生人累計81.91,差額:1299918.09

第14天,陌生人給富翁累計1400000.00,富翁給陌生人累計163.83,差額:1399836.17

第15天,陌生人給富翁累計1500000.00,富翁給陌生人累計327.67,差額:1499672.33

第16天,陌生人給富翁累計1600000.00,富翁給陌生人累計655.35,差額:1599344.65

第17天,陌生人給富翁累計1700000.00,富翁給陌生人累計1310.71,差額:1698689.29

第18天,陌生人給富翁累計1800000.00,富翁給陌生人累計2621.43,差額:1797378.57

第19天,陌生人給富翁累計1900000.00,富翁給陌生人累計5242.87,差額:1894757.13

第20天,陌生人給富翁累計2000000.00,富翁給陌生人累計10485.75,差額:1989514.25

第21天,陌生人給富翁累計2100000.00,富翁給陌生人累計20971.51,差額:2079028.49

第22天,陌生人給富翁累計2200000.00,富翁給陌生人累計41943.03,差額:2158056.97

第23天,陌生人給富翁累計2300000.00,富翁給陌生人累計83886.07,差額:2216113.93

第24天,陌生人給富翁累計2400000.00,富翁給陌生人累計167772.15,差額:2232227.85

第25天,陌生人給富翁累計2500000.00,富翁給陌生人累計335544.31,差額:2164455.69

第26天,陌生人給富翁累計2600000.00,富翁給陌生人累計671088.63,差額:1928911.37

第27天,陌生人給富翁累計2700000.00,富翁給陌生人累計1342177.27,差額:1357822.73

第28天,陌生人給富翁累計2800000.00,富翁給陌生人累計2684354.55,差額:115645.45

第29天,陌生人給富翁累計2900000.00,富翁給陌生人累計5368709.11,差額:-2468709.11

第30天,陌生人給富翁累計3000000.00,富翁給陌生人累計10737418.23,差額:-7737418.23

最終,陌生人給富翁:3000000.00,富翁給陌生人:10737418.23。 富翁傻帽了

2^30 = 1073741824,也就是上面說的1G,10億 。

-End-

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
realme x50 pro 5g試用
realme x50 pro 5g試用
2020年的第一場手機發布會由realmeX50揭開面紗。從屏幕尺寸規格,前置雙攝,後置四攝。屏幕刷新率的提升,乃至售價都是圍繞着友商K305G版本來的,看來今年5G市場必定血雨腥風。那麼我們通過一篇測評文章來帶你了解一下這款隻說真話的真我...
2025-12-14
思維導圖在中學數學中的應用
思維導圖在中學數學中的應用
思維導圖是基于對人腦的模拟,所以這一“數據庫”的儲存方式和組織結構和思維導圖的“構圖”方式不謀而合。數學中的形象思維主要包含直觀形象,經驗形象,創新形象,意會形象。利用這些與思維導圖相聯系是可行的。本文以較難的數學為例,講述數學思維導圖的作...
2025-12-14
客如雲超市收銀系統好用嗎
客如雲超市收銀系統好用嗎
收銀系統千千萬,常常讓商戶老闆挑得眼花缭亂,不少老闆反饋,不知道怎麼挑選收銀系統軟件才能不踩雷。本期小編收集了市場受歡迎度較高的五個收銀系統軟件,整理了它們各自的優勢和劣勢,供大家參考。第一名:秦絲收銀系統軟件秦絲軟件是進銷存軟件中的佼佼者...
2025-12-14
質子治療系統排名
質子治療系統排名
9月26日,國家藥品監督管理局批準了上海艾普強粒子設備有限公司生産的“質子治療系統”創新産品注冊申請。該産品是“十三五”期間科技部重點研發計劃“數字診療裝備專項”的重點支持項目,也是我國首台獲準上市的國産質子治療系統。該産品的獲批上市,标志...
2025-12-14
什麼地方要裝防火窗
什麼地方要裝防火窗
随着人們消防安全意識的增強,選擇安裝防火窗的用戶越來越多,那麼大家都知道安裝防火窗時應該注意些什麼嗎[what]?今天小編就帶大家來了解一下[靈光一閃]。一、檢查防火窗在儲存或者運輸過程中有可能會不慎導緻窗框、窗扇翹曲、變形、玻璃破損,所以...
2025-12-14
Copyright 2023-2025 - www.tftnews.com All Rights Reserved