→ ken52011219: 因為 single unsort or sort link 無法判別 先行者01/15 12:36
→ ken52011219: 的位置 要重新search 找到其位子01/15 12:36
→ ken52011219: 搞定表格內的時間複雜度 你就會你問的那題了01/15 12:39
嗯嗯我懂你的意思!但是為什麼在第一個小題中卻是O(1)呢
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 12:43:07
→ ken52011219: 上面那題 你已經畫起來關鍵字了 它是用singly link01/15 12:44
→ ken52011219: 加 index 代表它有紀錄01/15 12:44
→ ken52011219: 紀錄各link所代表的編號 故 O(1)01/15 12:47
所以我的內心就一直很掙扎..若是有編號那為什麼第一個還要花O(n)去Access..Orz
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 12:48:54
→ ken52011219: 比較麻煩的是insert 目前只能把它假設為unsort link01/15 12:48
→ ken52011219: list 若為sort 則為O(n)01/15 12:48
若有sort感覺就會提起(像是這份考古的第5題)
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 12:50:40
→ ken52011219: 你想像access為search index 可能比較好理解01/15 12:51
→ ken52011219: Access不會一個一個確認 是否為該資料 而是確定某資01/15 12:53
→ ken52011219: 料在某個index中 只要memory 去尋找該index編號即可01/15 12:53
→ ken52011219: 找到 01/15 12:53
可以這樣理解嗎:
Access就是link一個一個index下去search到所需的index,所以要花O(n)
而Insert跟Delete只需著重在動作本身,而Vector有提供Index,所以不需要再花O(n)去
尋找前一個node
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 13:01:06
→ ken52011219: 另外提一下 假如double link 的remote定義是 尋找該 01/15 13:00
→ ken52011219: 點並刪除則為O(n) 01/15 13:00
→ ken52011219: 純remote ,single link 為search +remote 若為我上01/15 13:03
→ ken52011219: 面提到的定義則可為兩search + remote or search+rem 01/15 13:03
→ ken52011219: ote01/15 13:03
→ ken52011219: 你兩個理解都跟我的理解一樣01/15 13:04
→ ken52011219: Single sort link為O(log n) binary search 我上面01/15 13:08
→ ken52011219: 打錯了01/15 13:08
不太懂k大的補充,所以delete跟remove不同嗎@@
是指說純delete是O(1)而純remove要先search所以是O(n)?
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 13:16:43
→ ken52011219: 應該說 沒有index 的singly link list 需要 search + 01/15 13:20
→ ken52011219: remote01/15 13:20
→ ken52011219: 若題目純論delete link list 就只是delete 該pointer01/15 13:21
→ ken52011219: 沒錯01/15 13:21
懂了!感謝k大耐心解釋m(_ _)m
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 13:22:23
→ ken52011219: 主要差別是依題目有沒有singly link 這個關鍵字為主01/15 13:22
差別在於..? 不然題型會有什麼其他的link list型呢(只寫過交、台考古QQ)
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 13:23:46
→ ken52011219: 看他需不需要討論到這麼深入 01/15 13:23
→ ken52011219: 我經驗是類似這種多段敘述 且有提到single link 就要 01/15 13:35
→ ken52011219: 小心啦@@ 01/15 13:35
→ ken52011219: 純談論link list 就不分double link or singly link 01/15 13:37
→ ken52011219: 即可最低到O(1) (大概吧? 01/15 13:37
應該是的XD 感恩!
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 13:45:52
→ HEroKuma: 用C++的vector來看, Insert跟Delete都是直接對Index作存01/15 14:15
→ HEroKuma: 取操作資料, 所以複雜度=O(1)01/15 14:17
→ HEroKuma: 阿不對 他問用誰實作時存取的複雜度, 不要理我XD01/15 14:19
推 Transfat: 我還是有點不懂,為什麼singly linked list的Remove要 01/15 14:40
→ Transfat: O(n),而Doubly linked list只要O(1)呢 01/15 14:40
推 Transfat: 還有楓葉的singly linked list和doubly linked list的 01/15 14:42
→ Transfat: Search(L,k)為什麼是花O(log(n)),我不是sequential sear 01/15 14:43
→ Transfat: ch下去,假設worst case花O(n)嗎?01/15 14:43
我的理解是,在第二小部分中的link list,因為沒有index,所以singly linked list需
要花費O(n)找出前一個node(因為進行刪除時前一個node的link要指向刪除之點的下一個
node)
而Double linked list因為可以直接藉由左邊的link指向上個node,所以不用搜尋上一個
nose
而O(log(n))我就不懂了,因為binary search只支援Random Access才對...?
※ 編輯: ssssIssss (140.112.25.105), 01/15/2017 15:16:23
→ ken52011219: 要已 sort 過才行 O(log n) 未sort 過順序是亂的 01/15 21:15
→ ken52011219: 已經排序過的當然可以先從中間值去檢視是大還是小 01/15 21:15
→ ssssIssss: 但是有辦法O(1)就提取到中間的node嗎? 01/15 22:24
→ ken52011219: 我記得用argument data AVL可以做到lg n 01/16 08:36
→ w181496: 問一下 這題答案是正確的嗎?我在別的地方有看到不同答 01/16 10:38
→ w181496: 案@@ 01/16 10:38
→ w181496: 然後我也覺得那張表格的logn怪怪的 單純的linked list沒 01/16 10:40
→ w181496: 辦法二分搜吧... 01/16 10:40
→ ken52011219: 傻眼 XDD 我被這張圖背叛了 我自己看的演算法答案也 01/16 10:55
→ ken52011219: 是寫 linear 01/16 10:55
→ ken52011219: i.imgur.com/a/DuZxc 抱歉 是我錯了 01/16 10:57
→ ken52011219: 等我今天複習完 argument data 在看可不可以好了@@ 01/16 11:06
推 Transfat: 是啊難怪看起來怪怪的,應該只有sorted arrary可以Binary 01/16 19:36
→ Transfat: search 01/16 19:36
→ ssssIssss: 是的 01/17 20:06
推 aa06697: skip list 可以binary search唷 01/24 14:42