看板 Grad-ProbAsk 關於我們 聯絡資訊
http://ppt.cc/jY8n 如題A為O(1) B為O(lgn) C為O(n) 2.4)各是B還是C? 9.10)各是A還是C? 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc)
rnf0:連結有誤 01/26 11:49
不好意思,更新了,感恩 ※ 編輯: jas1123kimo 來自: 123.241.44.21 (01/26 11:53)
rnf0:皆為C 01/26 11:58
jas1123kimo:Delete不是都是O(1)嗎,怎會變成O(N)sk 01/26 12:12
jas1123kimo: 呢? 01/26 12:12
rnf0:delete要把前一項的next指給下一項 01/26 12:15
rnf0:所以必須要search next==P的node,這要O(n) 01/26 12:16
rnf0:O(1)是free node而已,還要maintain前後的關係 01/26 12:17
jas1123kimo:所以11.12也是C嗎@_@? 01/26 12:22
rnf0:A 01/26 12:27
rnf0:可以直接拿到previous幹嘛search呢? 01/26 12:27
jas1123kimo:see 感恩!長知識 01/26 12:29
Bearcome:所以前幾篇有題DLL delete應該就是O(1)沒錯了 01/26 12:32
jas1123kimo:熊來你說9,10是A!? 01/26 12:34
Bearcome:不是 我是說台大電機101的某題 01/26 12:35
s07021990:101的delete跟這9.10的狀況不一樣吧 01/26 13:03
doubt2008:4是O(n),10是O(1),詳細可參考rnbjacky的詳解 01/26 13:16
doubt2008:此題的delete已經把要刪除的node用pointer指著了 01/26 13:17
doubt2008:完整題目:http://ppt.cc/4T9v 01/26 13:22
Bearcome:對SINGLE來說就算用P指著了 還是不知道上一個是誰不是嗎? 01/26 13:28
dennis2030:這題我認為Bearcom大說的是對的,不知道上一個node是誰 01/26 17:53
dennis2030:所以依然要花O(n)的時間去上個node,才能修正他的next 01/26 17:53
dennis2030:所以我認為10是O(n) 01/26 17:55
doubt2008:把P指著的node的下一個node的data搬到P指著的node 01/26 19:42
doubt2008:P指著的node的next指向 原本P指著的node的下一個node的 01/26 19:42
doubt2008:next 01/26 19:43
doubt2008:簡單來說就是知道欲刪除的node(A)和它的下一個node(B) 01/26 19:57
doubt2008:把B複製到A,再把B刪除,這樣不用知道A的前一個node 01/26 19:58
fine246:http://ppt.cc/1Vl~ 附上簡易的程式碼。缺點就是當刪除最 01/27 14:31
fine246:後一個點時,不能這樣做XD 01/27 14:31
rnf0:cool! 最後一個點直接free掉就好了 01/27 15:42
dennis2030:這樣會把pointer內的data改掉,會造成其他指令出錯吧? 01/27 17:08
doubt2008:最後一個直接free掉它的上一個指過去感覺會記憶體錯誤 01/27 18:43
doubt2008:所以還是要搜尋到最後一個的前一個,不過此題最後面有用 01/27 18:44
doubt2008:tail指著 所以還是不用搜尋 01/27 18:44
rnf0:直接free掉變null怎麼會錯呢? 最後一個會指向null 01/27 21:11
rnf0:C/C++不能這樣做的樣子orz,tail好像也沒辦法maintain 01/27 21:14
rnf0:因為tail的問題,worst case是O(n) 01/27 21:22
doubt2008:tail好像真的要前一個node才能,那就是O(n)了 01/27 23:48
doubt2008:另外回dennis大,若是有外部參考到B的話,會不知道B已經 01/27 23:50
doubt2008:變成他的下一個node了 01/27 23:51
doubt2008:說錯= = 上面說的B是A 01/27 23:52
rnf0:但如果用一個preTail來存tail's previous就可以O(1) 01/28 08:06
doubt2008:可是這樣變成要maintain preTail...因為刪除後preTail 01/28 17:40
doubt2008:要往前面一個node指 01/28 17:40
rnf0:只好再加一個prePreTail了.. (誤 01/28 19:42
rnf0:每次insert都存一塊錢,在delete tail花掉,amortized是O(1) 01/28 21:14