1. 程式人生 > >實現了一個壓縮演算法,在資料高度壓縮的前提下,還可以快速查詢 key

實現了一個壓縮演算法,在資料高度壓縮的前提下,還可以快速查詢 key

最近寫了一個演算法,可用於 (key,value) 儲存,key 當然是 string 型別。

用一個 2.3G 的 url 集合做測試,如果不計 value 佔用的空間,key 集合的儲存空間可以被壓縮70倍!壓縮後整個資料結構僅佔31M記憶體!壓縮率比 bzip2 還要高。

本質性的不同於: gzip, bzip2 等壓縮演算法僅僅是壓縮而已,無法快速地從壓縮資料中查詢。

我實現的這個演算法能高效地支援對 key 的查詢,並且查詢的時間複雜度僅與 key 的長度有關,不管資料集合有多大,時間複雜度總是 O(strlen(key))。實際資料:當 key 長度均值為 76 位元組時(該 url 集合中所有 url 的平均長度),平均查詢時間大約 900 納秒(筆記本 i7-720M)。

可能有人以為是 bloom filter, MD5 之類投機取巧的實現方式,我付責任的地說:不是,該演算法是確定性的。bloom filter/MD5 ... 是概率的,並且它們的記憶體佔用還要更多。

如果要讓 key 再對應一個 value,並且仍然要以 O(strlen(key)) 的時間複雜度訪問 value,需要再多用一點點空間用於索引結構,仍以前面 url 壓縮為例,需要在 31M 的基礎上多大約 4M 的空間。當然,value 本身佔的空間是另外一回事。

有需要該演算法的公司或個人,請聯絡本人

相關推薦

實現一個壓縮演算法資料高度壓縮前提可以快速查詢 key

最近寫了一個演算法,可用於 (key,value) 儲存,key 當然是 string 型別。 用一個 2.3G 的 url 集合做測試,如果不計 value 佔用的空間,key 集合的儲存空間可以被壓縮70倍!壓縮後整個資料結構僅佔31M記憶體!壓縮率比 bzip2 還要高。 本質性的不同於: gzip,

swiper裏面的tab切換不同的slide高度不一樣外層高度何如隨之改變如果裏面的每一屏的高度不一樣那麽就會一直以高度最大的一個座位最外層的高度,總成頁面內容少的那一頁有很大空白改如何動態改變外層的高度

ide設置 就會 否則 location translate dir 最大的 ext 如果 解決方案:1.autoHeight: true;缺點:有明顯的跳動效果2.先給容器設固定高度,每次滑動多少時,改變當前tab頁的容器高度,我在實現是遇到一點小問題,代碼忘記保存了。

放棄std::list自己實現一個簡單的list

原因 在專案中前人使用了std::list來做一個佇列式,支援頭或者尾的push操作。使用場景是視訊的錄製: 生產者:從攝像頭採集資料,然後push_front到佇列頭,如果超過了最大限制,則pop_back佇列尾的元素,實現丟幀操作 消費者:從佇列裡面back拿到楨,然後pop

Eclipse Git提交程式碼一個“工程同名的資料夾”找不到解決辦法!!!

提交程式碼到Git倉庫,有2種方式。第1種,先在OSChina等平臺建立git專案,本地clone,再在本地修改程式碼提交。√這種方式,沒任何問題。不過,我平時不喜歡這麼幹。第2種,本地已經有了專案,需要提交到git上。×分享程式碼到Git遠端倉庫的時候,本地首先需要建立本地

vue 移動端今天寫一個根據後臺傳過來的http狀態碼實現跳轉error頁面

首先是現在main.js裡面進行配置Vue.prototype.$onError = function (error) { var error_msg = '網路錯誤'; var toastFlag = true; switch (error.errorCode) { cas

封裝一個電商放大鏡移入放大的功能適用於VUE

style ear 是我 PE view 版本 文件中 clas pda 由於vue只支持ie9以上版本,所以這個插件也是一樣的 效果圖: 第一步,在goodsinfo文件中引入css <style scoped> @import "../../

用單進程、多線程並發、多線程分別實現一個或多個網站的所有鏈接用瀏覽器打開所有鏈接並保存截圖 python

app imp mat 並發執行 cut h+ chrome 鏈接 目錄 #coding=utf-8import requestsimport re,os,time,ConfigParserfrom selenium import webdriverfrom multipr

憑什麼說AMQP比JMS優秀啊?JMS才是真正實現一個客戶端呼叫多種產品的訊息中介軟體啊

一、AMQP 歷史​ 訊息佇列(Message Queue)起源於一位來自 MIT 的硬體設計教育工作者 Vivek Ranadivé 設想了一種通用軟體匯流排,就像主機板上的匯流排那樣,供其他應用程式接入。Vivek在1983年成立了 Teknekron,高盛等公司作為第一批使用者再金融交易中採用了 Tek

我用Python實現一個小說網站雛形

前言 前段時間做了一個爬取妹子套圖的小功能,小夥伴們似乎很有興趣,為了還特意組建了一個Python興趣學習小組,來一起學習。十個python九個爬,在大家的印象中好像Python只能做爬蟲。然而並非如此,Python 也可以做Web開發,接下來給大家展示一下如何做一個小說站點。 相關軟體

PTA 陣列迴圈左移 (20 分) 本題要求實現一個對陣列進行迴圈左移的簡單函式:一個數組a中存有n(>0)個整數在不允許使用另外陣列的前提下,將每個整數迴圈向左移m(≥0)個位置即將a中的

陣列迴圈左移 (20 分) 本題要求實現一個對陣列進行迴圈左移的簡單函式:一個數組a中存有n(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向左移m(≥0)個位置,即將a中的資料由(a​0​​a​1​​⋯a​n−1​​)變換為(a​m​​⋯a​n−

在不使用JavaScript內建的parseInt()函式的前提利用map和reduce操作實現一個string2int()函式

在不使用JavaScript內建的parseInt()函式的前提下,利用map和reduce操作實現一個string2int()函式 題目出自廖雪峰老師的JavaScript教程: 把一個字串13579先變成Array——[1, 3, 5, 7, 9],再利用reduce()就可以寫出一

使用 :before 等偽元素中的其中一個來做 animation 動畫; 在 animation 動畫改變其中的某個 rem 的值; 在這樣的前提又是使用有這個 bug 的版本瀏覽器那麼就

今天看到一位大神在工作中遇到的bug,所以記錄下來,說不定自己以後就遇到了呢,哈哈,站在巨人的肩膀上。 參考網址:http://www.codeceo.com/article/crash-app-by-css.html @-webkit-keyframes crashCh

Java實現一個萬年曆

import java.util.Scanner; public class DaysCelandar {     // 判斷是不是閏月年     public static boolean isRun(int year) {        if ((year % 4

用java實現一個小的計算器

突然之間心血來潮,就是想試一試資料結構怎麼用.到現在才感覺的,資料結構是一種思想,一種思維方式,用怎樣的方式去解決怎樣的問題,這些是資料結構和演算法給我們的. 言歸正傳吧,說說這個小計算器(其實還有太多需要擴充套件和改進的地方).暫時只侷限在加減乘除,因為定義的是int型別的

在只有一個網線的前提實現兩個電腦之間的區域網通訊(伽卡他卡電子教室通訊)...

在現實生活中,會出現只有一個網線,路由器交換機都沒有的情況,這時候怎麼實現兩臺電腦之間的通訊。 舉個簡單例子,實現伽卡他卡電子教室教師端和學生端在一根網線情況下通訊。 我們以Window系統為例,設定IPv4協議IP即可解決。 1、控制面板-網路和Internet-網路連線-本地連線-屬性  2、選擇IPv

用Java和Jquery實現一個砸金蛋例子

之前在網上找到了一個Jquery+PHP實現的砸金蛋的例子,正好公司也要我寫一個類似的砸金蛋的功能,於是在網上找了找參考,用Jsp程式也弄了一個出來,首先是Html的效果,我打算每次在頁面上只顯示一個金蛋,點選的時候用Ajax提交,Java在後臺處理一下返回結果

用css實現一個精緻的縱向導航選單

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>縱向導航選單</title><sty

設計一個函式實現一個字串中的大寫字元變為小寫字元小寫字元變為大寫字元數字不變刪除其他字元

例如 String str=“[email protected]#”;呼叫這個函式執行後得到的結果是:ABC123abc。 貼出程式碼: package com.lovo.t_9_22; import java.util.ArrayList; import j

程式設計師寫一個新手都寫不出的低階bug被罵慘

你知道的越多,你不知道的越多 點贊再看,養成習慣 本文 GitHub https://github.com/JavaFamily 已收錄,有一線大廠面試點思維導圖,也整理了很多我的文件,歡迎Star和完善,大家面試可以參照考點複習,希望我們一起有點東西。 前前言 為啥今天有個前前言呢? 因

python 一球從n米(自己輸入)高度自由落每次落地後反跳回原高度的一半;再落求它在第10次落地時共經過多少米?第10次反彈多高?

次數 clas python pre spa range else 輸入 bsp n = int(input(‘落地的高度為:‘)) #ciShu = int(input(‘落地的次數:‘)) sum = 0 for ciShu in range(1,4): if