自定義python自建型別(五)進一步優化的YY

2021-08-09 15:41:56 字數 2620 閱讀 7675

其實還有更有效的優化方式

我們發現其實很多時候我們的查詢時間消耗都在計算hash跟hash比對上(空間效率比較高的map們可能還有各種發生衝突時的解決方法),如果我們製作一種dict,它的key全是int,且長度很短(不高於16),那麼可想而知,這種dict的查詢效率也是很高的,哪怕它的查詢是遍歷對比。

這時候的優化問題就變成了如何將data-dict變成全int的key。觀察我們的data組成,其實是乙個稀疏的sql表,每乙個data的總資料列數是固定且有限個的。那麼我們可以在本data內對這些資料key(第二次dict的key)做出排序,儲存/查詢時都是用key在data內的序號作為實際key。

按照這個思路我做出了相關解決方案,**位於

中的intdict

測試結果:

num = 1, origintime=51.591873, inttime=61.290979, sparsedict=68.378925

num = 2, origintime=55.551052, inttime=66.631794, sparsedict=76.571941

num = 3, origintime=50.579071, inttime=60.199022, sparsedict=70.519924

num = 4, origintime=50.239086, inttime=60.011148, sparsedict=67.738056

num = 5, origintime=50.729036, inttime=60.403109, sparsedict=67.957163

num = 6, origintime=50.130129, inttime=60.768127, sparsedict=74.347019

num = 7, origintime=50.580978, inttime=60.745001, sparsedict=80.539942

num = 8, origintime=50.107956, inttime=58.940887, sparsedict=67.616940

num = 9, origintime=50.472021, inttime=61.228037, sparsedict=76.424122

num = 10, origintime=51.106930, inttime=61.836004, sparsedict=67.652941

num = 11, origintime=53.915024, inttime=65.168142, sparsedict=80.833912

num = 12, origintime=49.608946, inttime=60.456991, sparsedict=85.268974

num = 13, origintime=50.870180, inttime=62.319040, sparsedict=79.968214

num = 14, origintime=51.183939, inttime=61.183929, sparsedict=69.056034

num = 15, origintime=49.389839, inttime=60.192108, sparsedict=72.226048

num = 16, origintime=50.371170, inttime=61.887026, sparsedict=66.632986

num = 17, origintime=50.541162, inttime=63.502073, sparsedict=113.092899

num = 18, origintime=56.902885, inttime=69.282055, sparsedict=95.767021

num = 19, origintime=49.847841, inttime=62.762022, sparsedict=87.718010

num = 20, origintime=49.977064, inttime=58.822870, sparsedict=66.658974

num = 21, origintime=49.958944, inttime=61.937809, sparsedict=73.325872

num = 22, origintime=53.570986, inttime=64.805984, sparsedict=85.670948

num = 23, origintime=51.723957, inttime=62.056780, sparsedict=70.452929

num = 24, origintime=49.860001, inttime=60.178041, sparsedict=79.142094

num = 25, origintime=50.115108, inttime=59.532881, sparsedict=65.464020

num = 26, origintime=49.773932, inttime=63.545942, sparsedict=70.005178

num = 27, origintime=49.484968, inttime=61.832190, sparsedict=75.034857

num = 28, origintime=50.660849, inttime=61.223984, sparsedict=91.153145

自定義python自建型別(一)剖析

由於python的dict在儲存時,為了降低衝突增大命中率,採用了比較寬鬆的空間分配方案 typedef struct dictobject pydictobject struct dictobject 其中ma table的每次擴容都是變為原來的2倍長度 if mp ma used n used ...

自定義刻度 Android自定義滑動刻度進度條

做到以上的效果圖,就可以知道,兩個模式,首先,定義相應的自定義屬性,額,沒辦法,上頭要求,所以規範點 新建乙個bar attrs.xml檔案 attr declare styleable resources 然後就是 中取得相應的屬性值和設定預設值 然後修改seekbar的線的顏色和滑動塊的屬性,通...

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...