首页
/
每日頭條
/
科技
/
二叉樹常考算法
二叉樹常考算法
更新时间:2024-11-11 17:38:57

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

二叉樹常考算法(趣味數學與編程)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
推荐阅读
手機攝影小技巧你學會了嗎
手機攝影小技巧你學會了嗎
今天給攝影初學者講幾句拍攝思路和手機攝影該注意的事項,這是我去雲南深度遊出發前的最後一貼。這幾年我用手機拍了好多對手機攝影不夠了解的人認為似乎是不可能東西,比如動感效果的,瀑布溪流,夜景效果,以及飛鳥藏羚羊等,相對來說用手機拍攝這些題材時的...
2024-11-11
為什麼一些在qq裡的文件在電腦裡打不開
為什麼一些在qq裡的文件在電腦裡打不開
為什麼一些在qq裡的文件在電腦裡打不開?文件傳輸安全等級為高(阻止接收任何文件),下面我們就來聊聊關于為什麼一些在qq裡的文件在電腦裡打不開?接下來我們就一起去了解一下吧!為什麼一些在qq裡的文件在電腦裡打不開文件傳輸安全等級為高(阻止接收...
2024-11-11
4g手機值得買嗎
4g手機值得買嗎
現在買4G手機值得嗎?你聽到這個問題時的第一個反應會不會跟我一樣,現在還會有人買4G手機?都2022年還買4G手機幹啥,那不就是49年入國軍?對于買4G手機值不值得這個問題,我們先來看看市面上還有沒有4G手機可供選購。從一些電商平台和手機品...
2024-11-11
天津雲印章管理平台小程序
天津雲印章管理平台小程序
為進一步優化我市營商環境,為市場主體增添活力,依據《天津市電子印章管理暫行辦法》,天津市公安局深入推進“互聯網公安”智慧民生服務,天津市電子印章管理服務平台2020年11月11日正式上線運行,面向社會提供集電子印章申請、制作、簽章、驗章、查...
2024-11-11
現在怎麼升級win10系統
現在怎麼升級win10系統
win10系統新版本又更新了,最新的版本号Win10RS4(1803版);此次更新增加了時間線(Timeline)、專注助手(FocusAssist)、聽寫功能(Dictation)等新功能。如何第一時間體驗新版本的新功能呢?(一)升級前的...
2024-11-11
Copyright 2023-2024 - www.tftnews.com All Rights Reserved