一瑰煎、從那幾個方面考量一個算法铺然?
- 1、時間復雜度
- 2酒甸、空間復雜度
- 3魄健、正確性
- 4、可讀性
- 5插勤、健壯性
二沽瘦、算法有哪些特性?
- 1农尖、有窮性析恋,算法必須在有限的步驟之后完成
- 2、確切性盛卡,每一步必須有確切意義
- 3助隧、具有0個或多個輸入項
- 4、具有1個或多個輸出
- 5滑沧、具有可行性(或有效性)
三并村、簡述堆、棧和隊列的區(qū)別:
(比喻:棧:吃多了吐滓技;隊列:吃多了拉??)
①堆(Heap)是在程序運行時哩牍,而不是在程序編譯時,申請某個大小的內存空間令漂。即動態(tài)分配內存膝昆,對其訪問和對一般內存的訪問沒有區(qū)別。通常是一個可以被看做一棵樹的數組對象洗显,也總是一棵完全二叉樹外潜。
②棧(Stack)(又叫堆棧),就是一個桶挠唆,后放進去的先拿出來处窥,它下面本來有的東西要等它出來之后才能出來。(后進先出)
③隊列(Queue)只能在隊頭做刪除操作,在隊尾做插入操作.而棧只能在棧頂做插入和刪除操作玄组。(先進先出)
四滔驾、線性表的基本操作有哪些?
初始化(創(chuàng)建)俄讹,插入元素哆致,查找元素,刪除元素患膛,修改指定位置的元素摊阀,得到指定位置的元素,請空表等。
五胞此、二叉樹中的先序遍歷臣咖、中序遍歷和后序遍歷的順序
(前序遍歷、中序遍歷和后續(xù)遍歷都屬于深度優(yōu)先的遍歷漱牵,都是相對于根節(jié)點而言的前夺蛇、中
后,都是一頭咋到底酣胀,先找到葉子節(jié)點再回溯)
- 前序遍歷:先遍歷根結點刁赦,然后遍歷左子樹,最后遍歷右子樹闻镶。
A B D H E C F G
- 前序遍歷:先遍歷根結點刁赦,然后遍歷左子樹,最后遍歷右子樹闻镶。
2.中序遍歷:先遍歷左子樹甚脉,然后遍歷根結點,最后遍歷右子樹儒溉。
H D B E A F C G3.后序遍歷:先遍歷左子樹宦焦,然后遍歷右子樹,最后遍歷根節(jié)點顿涣。
H D E B F G C A
另外如果是層序遍歷波闹,從上到下按層次訪問樹
A B C D E F G H
六、散列表的特點和用途
散列表(也叫哈希表)涛碑,是一種查找算法精堕,與鏈表、樹等算法不同的是蒲障,散列表算法在查找時不需要進行一系列和關鍵字(關鍵字是數據元素中某個數據項的值歹篓,用以標識一個數據元素)的比較操作。
散列表算法希望能盡量做到不經過任何比較揉阎,通過一次存取就能得到所查找的數據元素庄撮,因而必須要再數據元素的存儲位置和它的關鍵字(可用的key)之間建立一個確定的對應關系,使每個關鍵字和散列表中一個唯一的存儲位置相對應毙籽。因此在查找時洞斯,只要根據這個對應關系找到給定關鍵字在散列表中的位置即可。這種對應關系被稱作散列函數(可用h(key)表示)坑赡。
根據設定的散列函數h(key)和處理沖突的方法將一組關鍵字key映射到一個有限的連續(xù)地址區(qū)間上烙如,并以關鍵字在地址區(qū)間中的像作為數據元素在表中的存儲位置,這種表便被稱為散列表毅否,這一映像過程稱為散列亚铁,所得存儲位置稱為散列地址。
七螟加、冒泡排序和選擇排序的優(yōu)缺點
冒泡排序是穩(wěn)定排序(即每次結果都一樣)徘溢,選擇排序是非穩(wěn)定排序吞琐。
冒泡排序需要開辟新的內存空間以供交換操作,交換次數多然爆,效率低顽分。
選擇排序相對于冒泡排序交換次數少,效率較高施蜜。