Re: [問題] linklist和forloop處理資料的速度

看板C_and_CPP作者 (麥子)時間11年前 (2013/06/21 02:34), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《clarkman (涼雨)》之銘言: : 目前想管理一組編號,可能是0~255,然後想要做到快速處理 : 用C處理 : 現在考慮兩種作法,不太知道怎麼樣才能做到高效率。 : 請問大家有更好的辦法嘛?以及下面兩種我該選擇哪一種? : 1. 使用linklist,當編號空出來就塞到linklist裡,要用編號就 : 直接取走,移除這個node : 缺點:一直new和free,還有串連、移除 =>這是目前的架構 : 2. 開一個32byte的陣列,每個bit當成是一個id : 一次掃一個byte,如果是ff,代表全用掉,往下一個byte掃 : 當發現不是ff,就開始掃bit,掃到後換算成id : 缺點:怕掃資料花太多時間,最壞的案例應該是id 255,先掃16次byte : 確認有無用完,然後再掃七次bit確認有沒有空的 3. 在記憶體空間很夠的時候,使用 linklist ,但是不要 new/free 。 一開始先把 256 個 nodes 用 array 開好,然後把它們串起來。 要用編號就從頭取走,然後指到新的頭。有新編號空出來, 就從頭的地方塞進去。 -- 活著的目的是為主活 然後為主死 死亡的目的是為主死 然後為主活 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.24.61

06/21 09:10, , 1F
應該沒那麼大的空間可以讓我用@@
06/21 09:10, 1F

06/21 10:23, , 2F
以你的例子一個編號只佔 1 byte
06/21 10:23, 2F

06/21 10:23, , 3F
再怎樣也比 linked-list 省
06/21 10:23, 3F
嗯,一個 node 應該只需要一個 byte ,這應該已經... 很省了阿 XD ※ 編輯: sitos 來自: 122.116.24.61 (06/21 14:32)

06/24 10:15, , 4F
你的方法好像很不錯耶,用兩個index來處理也可以
06/24 10:15, 4F
我隨便心裡面估一下,應該是比原本提到的方法快。 不過當然也很可能有其它好寫又更快的方法。 ※ 編輯: sitos 來自: 122.116.24.61 (06/25 02:25)

06/26 05:27, , 5F
方法三看來看去就是用 array implement stack 啊...
06/26 05:27, 5F
文章代碼(AID): #1Hmqj1D7 (C_and_CPP)
文章代碼(AID): #1Hmqj1D7 (C_and_CPP)