堆,棧,佇列的一些淺薄的理解

2022-08-11 16:30:21 字數 1641 閱讀 4525

一些自己理解的概念

(1)記憶體:記憶體是計算機重要的部件之一,任何程式都需要在記憶體中執行,是與cpu和外部儲存裝置資料溝通的橋梁。在計算機執行的過程中,cpu會把記憶體中的資料進行運算,當執行結束後,cpu會把迅速按結果暫時輸出到記憶體。所以記憶體也決定著計算機的穩定執行。

(3)常用的資料結構:陣列、棧、佇列、堆、鍊錶、樹、圖、雜湊表等。

(4)堆:可以看作是乙個完全二叉樹(若設二叉樹的深度為h,除第h層外,其它各層(1h-1)的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。)堆要在程式執行時動態分配記憶體,訪問速度較慢。

string str1="abc";

string str2="abc";

jvm建立了兩個引用str1和str2,但只建立了乙個物件,而且兩個引用都指向了這個物件

堆先進先出

下面用過陣列來模擬下(完全二叉樹)

棧是後進先出

(6)佇列:佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

佇列先進先出

(7)記憶體中的堆記憶體和佔記憶體(切記不是資料結構中的堆和棧)

棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os**,分配方式倒是類似於鍊錶。

棧使用的是一級快取, 他們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放。

堆則是存放在二級快取中,生命週期由虛擬機器的垃圾**演算法來決定(並不是一旦成為孤兒物件就能被**)。所以呼叫這些物件的速度要相對來得低一些。

:由系統自動分配,速度較快。但程式設計師是無法控制的。

:是由new分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。

棧:在編譯時確定的,不是在執行時.

堆:在執行時確定的,不是在編譯時.

棧:int, short, long, byte, float, double, boolean, char等基本型別 和物件的引用(比如 car car =new car()中car car為物件的引用 ,而 new car()是實際物件,存在於堆中)。

堆:包裝類和真實的物件(string 型別也存在於堆記憶體)

LambdaMart一些淺薄理解

首先ranknet 是pairwise排序學習演算法,利用神經網路進行計算得到文件分數,從而得到文件i在文件j之前的概率,即為文件ij之間的關係 pair 進而得到損失函式,對其進行優化 其次lambdarank 是listwise排序學習演算法,是在ranknet基礎上進行的優化,由於最基本的pa...

關於XGBoost一些淺薄理解

決策樹 分類 靈魂 依靠某種指標進行樹的 達到分類或回歸的目的,總希望是純度越高越好 eg id3演算法就用資訊增益度量屬性選擇標準,選擇 後資訊增益最大的屬性進行 cart,classification and regression tree 分類與回歸分析 相同點 本質都是特徵到結果 標籤的對映...

堆疊的一些理解

堆疊是一種執行 後進先出 演算法的資料結構。設想有乙個直徑不大 一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律 先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以 先進後出 就是這種結構的特點。堆疊就是這...