信息學奧賽初賽天天練-39-CSP-J2021基礎題-哈夫曼樹、哈夫曼編碼、貪心算法、滿二叉樹、完全二叉樹、前中后綴表達式轉換

PDF文檔公眾號回復關鍵字:20240629

在這里插入圖片描述

2022 CSP-J 選擇題

單項選擇題(共15題,每題2分,共計30分:每題有且僅有一個正確選項)

5.對于入棧順序為a,b,c,d,e的序列,下列( )不合法的出棧序列

A. a,b,c,d,e

B. e,d,c,b,a

C. b,a,c,d,e

D. c,d,a,e,b

8.如果一顆二叉樹只有根節點,那么這棵二叉樹高度為1。請問高度為5的完全二叉樹有( )種不同的形態

A. 16

B. 15

C. 17

D. 32

9.表達式a* (b+c)* d的后綴表達式為( ),其中 *和 +是運算符

A. * * a + b c d

B. a b c + * d *

C. a b c + d * *

D. * a * + b c d

11.在數據壓縮編碼中的哈夫曼編碼方法,在本質上是一種( ) 策略

A. 枚舉

B. 貪心

C. 遞歸

D. 動態規劃

15.有四個人要從A點坐一條船過河到B點,船一開始在A點。該船一次最多可坐兩個人。已知這四個人中每個人獨自坐船的過河時間分別為1、2、4、8,且兩個人坐船的過河時間為兩人獨自過河時間的較大者。則最短( )時間可以讓四個人都過河到B點(包括從B點把船開回A點的時間)

A. 14

B. 15

C. 16

D. 17

2 相關知識點

棧又名堆棧,是一種限定僅在表尾進行插入和刪除操作的線性表,這一端稱為棧頂,另一端稱為棧底

棧中的數據元素遵守后進先出的原則

二叉樹

每個結點至多擁有兩棵子樹(即二叉樹中不存在度大于2的結點),并且,二叉樹的子樹有左右之分,其次序不能任意顛倒,例如下面是一棵二叉樹

滿二叉樹

滿二叉樹又叫完美二叉樹,除了葉子結點之外的每一個結點都有兩個孩子,樹的葉子節點均在最后一層(也就是形成了一個完美的三角形)

完全二叉樹

除了最下層,其他每層都飽滿,去除最后一層是一棵滿二叉樹,最下層的結點都集中在該層最左邊的若干位置上

前綴表達式

前綴表達式,也稱為波蘭表達式,是一種算術表達式表示方法,其中運算符位于操作數之前.

//示例1 中綴表達式a+b對應的前綴表達式
+a bC++
//示例2 中綴表達式3+4*2對應的前綴表達式
+ 3 * 4 2 

中綴表達式

是一種常見的算術表達式表示方法,其中運算符位于操作數之間

//示例1
3 + 4 * 2
//示例2
(1 + 2) * (3 - 4)C++

后綴表達式

后綴表達式,也稱為逆波蘭表達式,是一種算術表達式表示方法,其中運算符位于操作數之后

//示例1 中綴表達式a+b對應的后綴表達式C++
a b+
//示例2 中綴表達式3+4*2對應的前綴表達式3 4 2 * +    

中綴表達式轉后綴表達式

確定優先級,按優先級逐一處理操作符(把操作符從操作數中間移到操作數后邊)
例如如下中綴表達式轉為后綴表達式
1 + ( 2 + 3)* 4 ) – 5
// 按優先級對表達式數字加括號
((1 + (( 2 + 3)* 4 )) – 5 )  
//從最里面的一層括號開始運算,轉換成后綴表達式
//轉換方法,去除括號,數字在前,順序不變,操作符移到最后
1. ( 2 + 3) => 2 3 +
//  ( 2 + 3)可以看作一個整體x
2. (( 2 + 3)* 4 ) => (x+4) => x 4 + => 2 3 + 4 *
//(( 2 + 3)* 4 )看作一個整體x
3. (1 + (( 2 + 3)* 4 ))=> (1+x)=>1 x + = 1 2 3 + 4 * +
// (1 + (( 2 + 3)* 4 )) 看作一個整體x
4. ((1 + (( 2 + 3)* 4 )) – 5 ) =>(x-5)=>x 5 - => 1 2 3 + 4 * + 5 -
所以轉換后的后綴表達式為 1 2 3 + 4 * + 5 -

哈夫曼樹

1 選剩下的兩棵根權值最小的樹合并成一棵新樹

2 新樹的根權值等于兩棵合并前樹的根權值和

3 重復1和2

哈夫曼編碼

哈夫曼樹的左右孩子進行編碼稱為哈夫曼編碼,通常左邊為0,右邊為1

只對葉子節點進行編碼/解碼,編碼唯一

哈夫曼編碼是前綴編碼,任何一個字符的編碼都不是另一個字符編碼的前綴(只有葉子節點編碼)

哈夫曼編碼左邊為0,右邊為1是通常規定,也可以左邊為1右邊為0,但確定后編碼是唯一的

如果下圖為字母a,b,c,d,e的編碼,字母旁邊對應數字為其出現的頻率

貪心算法

所謂貪心算法是指,在對問題求解時,總是做出在當前看來是最好的選擇 。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的 局部最優解

哈夫曼編碼總是把出現頻率少的編碼相對較長,從而保證全局總的編碼最短

哈夫曼編碼使用的是貪心算法進行編碼

3 思路分析

5.對于入棧順序為a,b,c,d,e的序列,下列( D )不合法的出棧序列

A. a,b,c,d,e

B. e,d,c,b,a

C. b,a,c,d,e

D. c,d,a,e,b

分析

根據入棧出棧性質模擬,棧為后進先出

A a 進 a 出 b 進 b 出 c 進 c 出 d 進 d 出 e 進 e 出 出棧順序合法
B a 進 b 進 c 進 d 進 e 進 e 出 d 出 c 出 b 出 a 出 出棧順序合法
C a 進 b 進 b 出 a 出 c 進 c 出 d 進 d 出 e 進 e 出 出棧順序合法
D a 進 b 進 c 進 c 出 d 進 d 出 此時b在棧頂,a無法出棧 
所以選 D

8.如果一顆二叉樹只有根節點,那么這棵二叉樹高度為1。請問高度為5的完全二叉樹有( A )種不同的形態

A. 16

B. 15

C. 17

D. 32

分析

完全二叉樹,除最后一層,其他層都是滿的
高度為5有4層是滿的,后面1層節點是前面節點的2倍(1個父節點都有2個子節點)
前4層是滿的,形態不會變化,只有第5層形態可能變化,第5層節點只要保證從左到右排即可
具體如下
滿二叉樹
高度為1  1個節點  2^1-1=1
高度為2  1+2 個節點 2^2-1=3
高度為3  1+2+4個節點 2^3-1=7
高度為4  1+2+4+8 個節點2^4-1=15
高度為5  1+2+4+8+16 個節點 2^5-1=31
由于是完全二叉樹,說明第5層必有節點,第5層的節點最多可以31-15=16個
當第5層節點為16個時,此時是5層的滿二叉樹,是特殊的完全二叉樹
因此有16種不同的形態

9.表達式a* (b+c)* d的后綴表達式為( B ),其中 *和 +是運算符

A. * * a + b c d

B. a b c + * d *

C. a b c + d * *

D. * a * + b c d

分析

確定優先級,按優先級逐一處理操作符(把操作符從操作數中間移到操作數后邊)
a * (b+c)* d  -- ((a * (b+c))* d)((a * (b+c))* d)    
1 (b+c) => b c+ 
//  (b+c)  可以看作一個整體x
(a * (b+c)) => (a * x) => a x * => a b c + *
//(a * (b+c)) 可以看作一個整體x((a * (b+c))* d)  => (x * d) => x d * => a b c + * d * 

11.在數據壓縮編碼中的哈夫曼編碼方法,在本質上是一種( B ) 策略

A. 枚舉

B. 貪心

C. 遞歸

D. 動態規劃

分析

哈夫曼編碼總是把出現頻率少的編碼相對較長,從而保證全局總的編碼最短

哈夫曼編碼使用的是貪心算法進行編碼

15.有四個人要從A點坐一條船過河到B點,船一開始在A點。該船一次最多可坐兩個人。已知這四個人中每個人獨自坐船的過河時間分別為1、2、4、8,且兩個人坐船的過河時間為兩人獨自過河時間的較大者。則最短( B )時間可以讓四個人都過河到B點(包括從B點把船開回A點的時間)

A. 14

B. 15

C. 16

D. 17

分析

貪心算法解決此問題,貪心策略

1從剩余的人中選擇用時最小的2人過河

2 用時最小的人返回去接剩余的人

1 初始 1 2 4 8 在河的A邊

2從剩余的 1 2 4 8 找用時最少的2人(1 和 2)過河到B ,用時為2

3 在B端選擇用時間最少的去接,1去接,用時1

4 從剩余的 4 8 找用時最少的2人(4 和 8)過河到B ,用時為8

5 在B端選擇用時間最少的去接,2去接,用時2

6 從剩余的 1 2 過河 用時為2

上述過河時間累加 2+1+8+2+2=15

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37818.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

螺旋矩陣問題C代碼

給定一個n行m列的二維數組,要求按順時針螺旋順序輸出矩陣中的所有元素,n和m小于等于10 如下圖是一個三行四列的螺旋矩陣 要求輸出 1 2 3 4 8 12 11 10 9 5 6 7 全局變量定義 int a[11][11]; int vis[11][11]; // 訪問標記數組關鍵代碼如下 int dx[] …

MySQL高級-MVCC-基本概念(當前讀、快照讀)

文章目錄 1、MVCC基本概念1.1、當前讀1.1.1、創建表 stu1.1.2、測試 1.2、快照讀 1、MVCC基本概念 全稱Multi-Version Concurrency Control,多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突,快照讀為MySQL實現MVCC提供了一個…

OpenCV cv::Mat到 Eigen 的正確轉換——cv2eigen

在進行計算機視覺項目時,我們經常需要處理相機位姿的變換。最近,我在項目中遇到了一個看似簡單但實際上頗具挑戰性的問題:從 OpenCV 的 cv::Mat 格式轉換到 Eigen 庫的格式。這個過程中遇到了一些問題,但最終找到了一個穩健的解決…

鏤空的文字?分享 1 段優質 CSS 代碼片段!

大家好,我是大澈! 本文約 800 字,整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段優質 CSS 代碼片段,實現 CSS 文字鏤空的效果。 老規矩,先閱讀代碼片段并思考,再看代碼解析再思考&#…

nginx本地域名配置

修改hosts文件(僅限本地測試): 在Windows上,hosts文件位于C:\Windows\System32\drivers\etc\hosts。 打開hosts文件,添加一行:127.0.0.1 xxx.com (xxx.com為自己設定的域名) 如果修…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作數

Every day a Leetcode 題目來源:3190. 使所有元素都可以被 3 整除的最少操作數 解法1:遍歷 遍歷數組,累加最少操作數,即 min(num % 3, 3 - num % 3)。 代碼: /** lc appleetcode.cn id3190 langcpp** [3190] 使所…

uniapp+vue3開發微信小程序踩坑集

本文主要記錄使用uniappvue3開發微信小程序遇見的各種常見問題及注意點。(持續更新) 問題: 自定義組件為什么有些樣式加不上去 給自定義組件增加class的時候,有時候不生效有時候生效,一度讓我懷疑自己記憶錯亂。后來…

C++枚舉

C枚舉 枚舉的基礎用法不不再贅述枚舉的三點問題1、作用域問題解決思路1解決思路2 2、隱式轉換成int3、枚舉變量的實際類型無法明確指定 枚舉的基礎用法不不再贅述 枚舉的三點問題 1、作用域問題 舉個例子,顏色有blue代表藍色,心情有blue代表憂郁。 以…

mysql安裝配置教程

mysql安裝配置教程 MySQL是一個流行的關系型數據庫管理系統,用于存儲和管理數據。下面是簡要的MySQL安裝配置教程: 步驟1:下載MySQL 訪問MySQL官方網站(https://dev.mysql.com/downloads/mysql/)下載適合您操作系統…

Java冒泡排序實現及應用解析

Java冒泡排序實現及應用解析 冒泡排序是計算機科學中最基本的排序算法之一,盡管它的效率不是最高的,但由于其實現簡單,它在教學和某些特定場景下仍然具有不可替代的作用。本文將從Java語言的角度,深入探討冒泡排序的基本原理、實…

全國31省細分產品出口數據集(2002-2022年)

數據簡介:整理全國31個省直轄市自治區按hs碼分的22類細分產品的出口數據,只包含22類的細分,不包含更細的類目。可用來計算出口產品質量,出口產品技術復雜度等指標,數據區間為2002-2022年。 數據名稱:31省細…

《昇思25天學習打卡營第11天 | 昇思MindSpore基于 MindSpore 實現 BERT 對話情緒識別》

11天本節學習到BERT全稱是來自變換器的雙向編碼器表征量,它是Google于2018年末開發并發布的一種新型語言模型。BERT模型的主要創新點都在pre-train方法上,即用了Masked Language Model和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的repres…

【SGX系列教程】(五)Intel-SGX 官方示例分析(SampleCode)——RemoteAttestation

文章目錄 一.RemoteAttestation原理介紹1.1 遠程認證原理1.2 遠程認證步驟1.3 遠程認證基本流程1.4 IAS通過以下步驟驗證報告的簽名1.5 關鍵術語1.6 總結二.源碼分析2.1 README2.1.1 README給出的編譯流程2.2 重點代碼分析2.2.0 主要代碼模塊交互流程分析2.2.1 isv_app文件夾2.…

python-18-零基礎自學python-用類創建冰淇凌小店的口味

學習內容:《python編程:從入門到實踐》第二版 知識點: 類、子類、繼承、調用函數 練習內容: 練習9-6:冰激凌小店 冰激凌小店是一種特殊的餐館。編寫一個名為IceCreamStand的類,讓它繼承為完成練習9-1或…

YonBIP 獲取項目代碼配置(圖文)

項目開發文件在本地環境重新部署后,開發端機器需要重新部署,在此記錄一下操作過程。 1. 新建項目目錄,在目錄下點鼠標右鍵,選 Git Bash Here 2. 開始下載代碼,根據代碼量多少,幾分鐘就能下載完成。 3. 下載…

任意密碼重置漏洞

文章目錄 1. 任意密碼重置漏洞原理2. 任意密碼重置漏洞產生原因3. 任意密碼重置漏洞場景3.1 驗證碼爆破3.2 驗證憑證回傳3.3 驗證憑證未綁是用戶3.4 跳過驗證步驟3.5 憑證可預測3.6 同時向多個賬戶發送憑證 4. 任意密碼重置經典案例4.1 中國人壽某重要系統任意賬戶密碼重置4.2 …

【單元測試】Controller、Service、Repository 層的單元測試

Controller、Service、Repository 層的單元測試 1.Controller 層的單元測試1.1 創建一個用于測試的控制器1.2 編寫測試 2.Service 層的單元測試2.1 創建一個實體類2.2 創建服務類2.3 編寫測試 3.Repository 1.Controller 層的單元測試 下面通過實例演示如何在控制器中使用 Moc…

什么是死鎖以及如何避免

什么是死鎖? 死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進…

關于配置webpack eslint插件版本問題說明

webpack相關版本說明 按照當前情況下,以及eslint-webpack-plugin的官方版本使用的是8.x版本的eslint,我們進行如下依賴安裝 npm i -D eslint8 eslint-webpack-plugin "devDependencies": {"eslint": "^8.57.0","eslint-webpac…

簡單了解下Java中鎖的概念和原理

你好,這里是codetrend專欄“高并發編程基礎”。 Java提供了很多種鎖的接口和實現,通過對各種鎖的使用發現理解鎖的概念是很重要的。 Java的鎖通過java代碼實現,go語言的鎖通過go實現,python語言的鎖通過python實現。它們都實現的…