您剛剛從大學獲得計算機科學或軟件工程學位,并且正在尋找職業。您還記得自己喜歡單身漢編寫代碼,并與好友一起做過一些很棒的項目,然后決定要成為一名開發人員。
您開始準備工作面試,卻無法弄清楚記住哪些算法對于評分工作很重要。如果您處于這樣的位置,并且足夠快地進行面試,那么本文將幫助您記住求職面試可能需要的所有編碼算法。
軟件工程師的基本工作描述包括設計,增強和實施系統和應用程序。
為此,軟件工程師無需記住許多復雜的算法。相反,要求他們使用工作庫,框架和數據庫的組合來創建滿足其軟件需求的工具。
根據軟件工程領域的專家介紹,了解一些高級搜索算法在優化它們時會有所幫助,否則,您更有可能使用內置庫。話雖如此,這里列出了一些重要的算法,在進行面試時您應該具有一些基本的知識。
動態編程
動態編程是通過消除對遞歸調用的需求來優化隱性函數的策略。每當我們看到一個遞歸函數,其中某個代碼的某個部分被多次調用時,可以通過使用動態編程來大大改進。通過存儲前一個子函數的結果,可以消除遞歸性,從而不必多次調用它們。這樣可以將時間復雜度從指數時間降低到多項式時間。屬于動態編程類別的算法示例如下:
二進制搜索
顧名思義,搜索算法用于從稱為數據結構的給定集合中搜索元素。二進制搜索在提供排序后的元素數組和搜索鍵時有效。二進制搜索通過選擇中間元素并將其與搜索關鍵字進行比較來實現,如果該關鍵字小于中間元素的左側部分,則以相同的方式進行遍歷。如果現在在右部分上搜索密鑰。二進制搜索的時間復雜度為O(log n),其中n是數組中元素的數量。
排序算法
排序算法用于對數組進行排序,輸入中包含需要排序的數據類型。數據集可以按升序或降序排序。以下是一些要記住的重要排序算法。
合并排序
合并排序基于分而治之算法的原理進行。它是指將問題分解為較小的部分,并一一解決并最終合并在一起的實踐。合并排序將數組分為兩半,并在兩個半部分上調用sort函數,對這兩個半部分進行排序,然后使用merge函數合并在一起。合并排序的時間復雜度為O(n log n)。
快速排序
像合并排序一樣,快速排序也是基于分而治之的算法,它在排序功能方面與合并排序有所不同。Quicksort的工作原理是選擇最后一個元素作為樞軸數字,并將其放在中間,左側數字較小,而右側數字較大。左側和右側再次使用sort函數進行調用,結果對整個數組進行了排序。快速排序的時間復雜度為O(n ^ 2)。
深度優先搜索
DFS是一種搜索算法,它從節點開始搜索過程,一直向下到最左邊分支的最后一個葉子。在到達最左邊的葉子之后,算法開始回溯并遍歷樹的右側,依此類推。此DFS的問題在于,如果存在一個周期,則可以多次訪問某個節點。DFS的時間復雜度為O(V + E),其中V和E分別表示圖中的頂點和邊數。
廣度優先搜索
BFS是一種與DFS一樣從根開始的搜索算法。但是,它沒有遍歷左側的所有葉子,而是在同一級別上的節點附近搜索。遍歷一個級別后,算法將前進到下一個級別,并繼續遍歷直到找到元素。BFS的時間復雜度與DFS相同,為O(V + E)。
自定義數據結構
有時,典型的預定義數據結構無法完成任務,您需要更好,更強大的功能。自定義數據結構可以是真實或抽象對象,具體取決于其數據成員的用途。數據成員可以視為屬于指定對象的變量。
哈希表
哈希表是一種數據結構,用于存儲,訪問和修改時間為O(1)的數據。哈希數據結構使用哈希函數將給定值映射到特定鍵。然后,使用此密鑰快速訪問和檢索這些值,哈希的執行效率取決于所使用的哈希函數的類型。
鏈表
通常,數組的組件或任何鏈接的數據結構存儲在連續的內存位置中。這將占用空間,并且某些內存塊不可訪問(也就是說,如果內存不足)。為了克服這個問題,使用了鏈表數據結構,其中的數據不是連續存儲的,而是列表中的每個項目都有一個指向下一個元素的存儲位置的指針。第一個元素被稱為頭,最后一個元素被稱為尾。
問問題
軟件工程師應該知道的最重要的事情是詢問客戶。大多數客戶無法理解他們的觀點,如果開發人員不提出任何問題,則可能由于溝通不暢而引起問題。這樣,您將能夠理解他們正在努力實現的核心問題,而不僅僅是他們面臨的困難。
結論
有了這些基本算法的知識,就可以輕松進行面試。請記住,軟件工程師通常不依靠這些算法來完成工作。取而代之的是,它們被用來測試個人對他是否了解代碼工作的理解。如此說來,祝您下次面試順利。