二十万字C/C++、嵌入式软开面试题全集宝典十一
目錄
1、 紅黑樹的性質
2、 紅黑樹的插入與旋轉
3、 紅黑樹與平衡二叉樹
4、 二叉平衡樹、紅黑樹、B樹、B+樹的區別與聯系
5、 hello world 程序開始到打印到屏幕上的全過程?
?
1、 紅黑樹的性質
性質1.節點是紅色或黑色。
性質2.根節點是黑色。
性質3.每個葉子節點都是黑色的空節點(NIL節點)。
性質4.每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。
這些約束強制了紅黑樹的關鍵性質:從根到葉子的最長的可能路徑不多于最短的可能路徑的兩倍長。結果是這個樹大致上是平衡的。因為操作比如插入、刪除和查找某個值的最壞情況時間都要求與樹的高度成比例,這個在高度上的理論上限允許紅黑樹在最壞情況下都是高效的,而不同于普通的二叉查找樹。
下圖就是一個很典型的紅黑樹:
2、 紅黑樹的插入與旋轉
1、添加的節點必須為紅色
2、變色的情況:當前結點的父親是紅色,且它的叔結點也是紅色:
2.1 把父節點設置為黑色
2.2 把叔節點設置為黑色
2.3 把祖父節點設置為紅色
2.4 把當前指針定義到祖父節點,設為當前要操作的
3、左旋的情況:當前父節點是紅色,叔節點是黑色,且當前的節點是右子樹。
3.1 以父節點作為左旋。
4、右旋的情況:當前父節點是紅色,叔節點是黑色,且當前的節點是左子樹。
4.1 把父節點變成黑色
4.2 把祖父節點變為紅色
4.3 以祖父節點右旋轉
lsy注:
點這里
https://blog.csdn.net/qq_41687938/article/details/119634248
3、 紅黑樹與平衡二叉樹
1、紅黑樹放棄了追求完全平衡,追求大致平衡,在與平衡二叉樹的時間復雜度相差不大的情況下,保證每次插入最多只需要三次旋轉就能達到平衡,實現起來也更為簡單。
2、平衡二叉樹追求絕對平衡,條件比較苛刻,實現起來比較麻煩,每次插入新節點之后需要旋轉的次數不能預知。
lsy注:https://blog.csdn.net/qq_41687938/article/details/119634248
4、 二叉平衡樹、紅黑樹、B樹、B+樹的區別與聯系
1.二叉樹的查找的時間復雜度是O(log2N),其查找效率與深度有關,而普通的二叉樹可能由于內部節點排列問題退化成鏈表,這樣查找效率就會很低。
2.平衡二叉樹是更好的選擇,因為它保持平衡,即通過旋轉調整結構保持最小的深度。其查找的時間復雜度也是O(log2N)。
索引的結構也并非AVL樹或更優秀的紅黑樹,盡管它的查詢的時間復雜度很低。作為索引的結構應該是盡可能少的執行磁盤IO操作,因為執行磁盤IO操作非常的耗時。所以需要利用上磁盤的預讀功能。平衡二叉樹沒利用上。
3.B樹(多路搜索樹)是為了充分利用磁盤預讀功能來而創建的一種數據結構,也就是說B樹就是為了作為索引才被發明出來的。
紅黑樹這種結構,h明顯要深的多。由于邏輯上很近的節點(父子)物理上可能很遠,無法利用局部性,所以紅黑樹的I/O漸進復雜度也為O(h),效率明顯比B-Tree差很多。
4.?比B樹更適合作為索引的結構是B+樹
B樹:有序數組+平衡多叉樹;
B+樹:有序數組鏈表+平衡多叉樹;
B+樹的關鍵字全部存放在葉子節點中,非葉子節點用來做索引,而葉子節點中有一個指針指向一下個葉子節點。做這個優化的目的是為了提高區間訪問的性能。而正是這個特性決定了B+樹更適合用來存儲外部數據。
lsy注:B樹和B-樹都是指B-Tree
詳解平衡二叉樹、紅黑樹、B樹、B+樹在索引中的應用_子木呀的博客-CSDN博客
5、 hello world 程序開始到打印到屏幕上的全過程?
1.用戶告訴操作系統執行HelloWorld程序(通過鍵盤輸入等)
2.操作系統:找到helloworld程序的相關信息,檢查其類型是否是可執行文件;并通過程序首部信息,確定代碼和數據在可執行文件中的位置并計算出對應的磁盤塊地址。
3.操作系統:創建一個新進程,將HelloWorld可執行文件映射到該進程結構,表示由該進程執行helloworld程序。
4.操作系統:為helloworld程序設置cpu上下文環境,并跳到程序開始處。
5.執行helloworld程序的第一條指令,發生缺頁異常
6.操作系統:分配一頁物理內存,并將代碼從磁盤讀入內存,然后繼續執行helloworld程序
7.helloword程序執行puts函數(系統調用),在顯示器上寫一字符串
8.操作系統:找到要將字符串送往的顯示設備,通常設備是由一個進程控制的,所以,操作系統將要寫的字符串送給該進程
9.操作系統:控制設備的進程告訴設備的窗口系統,它要顯示該字符串,窗口系統確定這是一個合法的操作,然后將字符串轉換成像素,將像素寫入設備的存儲映像區
10.視頻硬件將像素轉換成顯示器可接收和一組控制數據信號
11.顯示器解釋信號,激發液晶屏
12.OK,我們在屏幕上看到了HelloWorld
總結
以上是生活随笔為你收集整理的二十万字C/C++、嵌入式软开面试题全集宝典十一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十万字C/C++、嵌入式软开面试题全集
- 下一篇: C++需要输出一个参数的地址时可能达不到