數據結構是在計算機中組織和存儲數據的一種專業方法,以使我們可以更有效地對存儲數據進行操作。數據結構在計算機科學和軟件工程領域具有廣泛而多樣的使用範圍。數據結構幾乎都用於開發的每個程序或軟件系統中。此外,數據結構屬於計算機科學和軟件工程的基本面。在軟件工程面試問題方面,這是一個關鍵主題。因此,作為開發人員,我們必須對數據結構有很好的了解。
數組是固定大小的結構,可以容納相同數據類型的項目。它可以是整數的數組,一系列浮點數,字符串或什至數組數組(例如二維數組)。數組是索引的,這意味著可以隨機訪問。
將元素插入數組並從數組中刪除元素,因為數組的大小固定,因此無法立即完成。如果要將元素插入數組,首先,您必須創建一個具有增加尺寸的新數組(當前尺寸 + 1),複製現有元素並添加新元素。刪除的尺寸較小的新數組也是如此。
鏈接列表是一個順序結構,由線性順序的一系列項目組成,彼此相互鏈接。因此,您必須順序訪問數據,並且不可能隨機訪問。鏈接列表提供了動態集的簡單而靈活的表示。
堆棧是LIFO (最後一次 - 最終可以訪問的元素)結構,通常可以在許多編程語言中找到。該結構被稱為“堆棧”,因為它類似於現實世界中的堆棧 - 一堆板塊。
用於表達評估(例如:用於解析和評估數學表達式的分流碼算法)。用於在遞歸編程中實現功能調用。
隊列是FIFO (首先是首先 - 首先可以訪問該元素的結構)結構通常可以在許多編程語言中找到。該結構被稱為“隊列”,因為它類似於現實世界的隊列 - 在隊列中等待的人。
用於管理多線程中的線程。用於實施排隊系統(例如:優先級排隊)。
哈希表是一個數據結構,該數據結構存儲具有與每個鍵關聯的鍵的值。此外,如果我們知道與該值相關的密鑰,它可以有效地支持查找。因此,無論數據大小如何,它都非常有效地插入和搜索。
直接地址在存儲在表中時,使用值和鍵之間的一對一映射。但是,當有大量鍵值對時,這種方法存在問題。該表將有很多記錄,並且鑑於在典型計算機上可用的內存,可能是不切實際的,甚至不可能被存儲。為了避免此問題,我們使用哈希表。
一個名為Hash函數(H)的特殊函數用於克服直接尋址時上述問題。在直接訪問中,具有鍵K的值存儲在插槽k中。使用哈希函數,我們計算每個值所在的表(插槽)的索引。使用哈希函數計算的給定鍵計算的值稱為哈希值,該值指示了該值映射的表的索引。
樹是一個分層結構,其中數據由分層組織並鏈接在一起。該結構與鏈接列表不同,而在鏈接列表中,項目以線性順序鏈接。在過去的幾十年中,已經開發了各種各樣的樹木,以適應某些應用並滿足某些限制。一些示例包括二進制搜索樹,B樹,Treap,紅黑樹,Splay Tree,Avl樹和N- Ary樹。
顧名思義,二進制搜索樹(BST)是一個二進制樹,其中數據以層次結構組織。該數據結構以排序順序存儲值。二進制搜索樹中的每個節點都包含以下屬性。
二進制搜索樹展示了將其與其他樹區分開的獨特屬性。該屬性被稱為** binary-search-Tree屬性**。
堆是二進制樹的特殊情況,在該二進制樹上,將父節點與孩子的價值觀進行比較,並得到相應的安排。
堆可有2種類型。
圖由一組有限的頂點或節點組成,以及連接這些頂點的一組邊緣。
圖的順序是圖中的頂點數。圖的大小是圖中的邊數。
如果兩個節點通過相同的邊緣相互連接,則據說它們相鄰。
如果圖形G的所有邊緣都有一個指示啟動頂點和端頂點是什麼的方向,則據說圖形是一個有向圖。我們說(u,v)是來自或留下頂點u的事件,是事件發生的,或者進入或進入頂點訴自動彈:從頂點到自身的邊緣。
如果圖形G。它可以在兩個頂點之間以兩種方式進行。
如果頂點未連接到圖中的任何其他節點,則據說它是隔離的。
Trie是一種類似樹狀的信息檢索數據結構,該數據結構存儲字母的字母。它也被稱為數字樹或radix樹或前綴樹。
Trie是一種有效的信息檢索數據結構。使用Trie,搜索複雜性可以達到最佳限制(密鑰長度)。如果我們將鑰匙存儲在二進制搜索樹中,則平衡的BST需要與M * log N成比例的時間,其中M是最大的字符串長度,而N是樹中的鍵數。使用Trie,我們可以在O(M)時間中搜索鍵。
1。標準Trie :這是一個像數據結構一樣有序的樹。
2。壓縮的Trie :用於實現空間優化。壓縮的Trie是標準Trie的高級版本。
3。後綴Trie :後綴Trie是壓縮Trie的高級版本。
使用Trie,我們可以在O(L)時間中插入並找到字符串,其中L代表單個單詞的長度。這顯然比BST快。這也比哈希的速度快,因為它的實現方式。我們不需要計算任何哈希功能。 Trie的另一個優點是,我們可以輕鬆地按字母順序打印所有單詞,而Hashhing不容易就可以。
動態編程是一種將問題分解為子問題的技術,並為將來的目的保存結果,因此我們不需要再次計算結果。優化子問題以優化整體解決方案被稱為最佳亞基屬性。動態編程的主要用途是解決優化問題。在這裡,優化問題意味著當我們試圖找出問題的最小解決方案或最大解決方案時。動態編程確保如果存在解決方案,可以找到問題的最佳解決方案。
時間複雜性算法O(1)在數組中查找特定元素,例如:print(my_array [97]),無論數組的大小如何,都可以直接查找一個元素,只需一個操作即可。 (順便說一句,這並不是真正的算法,但是它可以幫助我們了解時間複雜性的工作方式。)
o(n)找到最低值。該算法必須在具有n個值的數組中進行N操作以找到最低值,因為該算法必須一次比較每個值。
O(n 2)氣泡排序,選擇排序和插入排序是此時間複雜性的算法。在這些算法的頁面上解釋了其時間複雜性的原因。
大數據集大大減慢了這些算法。隨著n僅從100個值增加到200個值,操作數量可以增加30000!
o(n log n)QuickSort算法平均比上述三種排序算法要快,而O(n log n)是平均值,而不是最差的情況。 QuickSort最糟糕的情況也是O(n 2),但這是使QuickSort變得如此有趣的平均時間。稍後我們將了解QuickSort。
參考來自此鏈接-Sourav Saini?