原创 嚴格m叉樹(正則m叉樹)

嚴格m叉樹:只有度爲0的節點和度爲m的節點。 如何構造正則m叉樹:首先尋找N0節點的個數與Nm節點的個數之間的關係。 (1)從節點個數看:N = N0 + Nm (2)從分支數看:N - 1 = mNm 聯立兩個方程得:(m-1)

原创 具有n個節點的m叉樹的最大高度和最低高度推導

一、最大高度 試想一下,若有n個節點的m叉樹,當只有最後一層有m個節點,其餘層均只有一個節點,在所有含有個節點的m叉樹中一定是最高的。 二、最低高度 當每個非終端節點均含有m個孩子節點時間,此時整棵樹在所有含有n個節點的m叉樹中

原创 C++中的new有幾種?

1.普通new 形式:int* p = new int; 此時不能通過p是否爲nullptr來判斷內存是否開闢成功,而是需要通過bad_alloc來捕獲異常。 2.(nothrow) new 形式:int *p = new (no

原创 進程通信(三)共享內存

一、共享內存 共享內存是操作系統直接在物理內存上開闢一段空間作爲進程間通信的緩衝區域, 與管道、消息隊列等其他進程通信方式相比較,共享內存擁有更高的效率,原因是共享內存的設計是基於物理內存的地址直接進行操作的,這樣相比其他方式的I

原创 求解逆序對的個數(由歸併排序衍生出的O(nlogn)時間複雜度的算法)

逆序:在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱爲一個逆序。 一、暴力做法 int count(int *a, int n) { int res = 0; for (int i=0;

原创 Linux: ipcs命令,查看os進程通信的內核對象信息

ipcs --help 用法: ipcs [資源選項...] [輸出選項] ipcs -m|-q|-s -i <id> 顯示 IPC 設施的信息。 選項: -i, --id <id> 打印由<id>標識的資源的詳細信息

原创 記錄Linux編程中遇到的問題

vim支持系統剪貼板 sudo apt-get intall vim-gui-common gcc編譯mysql程序 gcc test.c -o test -L /usr/lib/mysql -lmysqlclient ubunt

原创 數據結構中“哨兵”的使用

1.順序查找中的哨兵:通過引入哨兵,可以必滿很多不必要的語句,從而提高程序效率。 2.直接插入排序的哨兵: 免去查找過程中每一步都要檢測整個查找表是否查找完畢,提高查找效率。

原创 關於System V進程通信內核對象的刪除

System v ipc的缺點: 當進程結束時,不會自動刪除進程通信的內核對象,並且能夠使用ipcs命令查看內核對象,如下: 由於進程通信內核對象也屬於操作系統的資源,如果長期佔用並且不使用確實是對操作系統資源的浪費,因此對於不

原创 x86保護模式下的內存分段的地址映射

閱讀此文,先熟悉x86體系早期的實模式下的內存分段的地址映射。 正是由於在實模式下直接對物理內存進行讀寫,非常不安全,所以誕生了新的內存分段的映射方式,其目的就是對物理內存進行保護,而對內存進行保護需要注意的是一下三點: 1.內存

原创 快速讀入的技巧

在OJ上練習題目時,有些題目數據的輸入非常大,即便是使用scanf()也會被卡常數,最後導致TLE。因此蒐集網上的解決方案,常見的有以下兩種: 一、當數據量不是特別大的時間,此時可以關閉stdio的同步,使得cin,cout與pr

原创 protobuf的使用(一)

一、protobuf簡介 protobuf (protocol buffer)是google公司實現的一種數據交換的格式,由於其是一種二進制的格式,相對於xml,json進行數據交換要快很多,且佔用存儲空間更小。因此可以把它用於分

原创 protobuf的使用(二)

1.定義字符串一般不使用string,使用bytes來代替string。若定義爲string,proto底層還是會把string->bytes,雖然不會影響結果,但是在一定程度上還是會浪費效率。 2.其他的數據類型,基本數據,列表

原创 protobuf的使用(三)

rpc方法的序列化和反序列化 rpc標籤 在protobuf中定義描述rpc方法的類型 - service 在proto文件中增加rpc服務的選項 // 表示生成service服務類和rpc方法描述,默認是不生成的 option