最近看程式設計之美的一些心得(不斷更新)

2021-07-04 23:07:09 字數 828 閱讀 2033

排序複雜度:o(n²),o(n*logn),o(n)

查詢負責度:o(n),o(logn),o(1)

其中排序複雜度為n²的為直接排序,選擇排序,希爾排序

nlogn的為歸併排序,快速排序和堆排序

n的一般是做hash或者通過bitmap,布隆過濾器等。

如果考慮到提高排序效率,則提高到log級別時,要考慮二分法排序;提高到o(n)級別則考慮bitmap或者hash了。

但是使用hash要注意hash衝突,衝突過大時則也有複雜度公升高的風險。

查詢:無序序列為o(n),有序序列為logn(二分查詢),最極端的為hash查詢或者bitmap查詢,則是o(1)級別。

插入刪除元素一般來講和查詢是對偶的

例如陣列查詢方便o(n)或者o(logn),但是增刪則為o(n)複雜度

鍊錶增刪都為o(1)複雜度(當直接找到改點時),查詢則為o(n)。

如果查詢和增刪要求同步提高且資料集沒有強關係,則可以考慮紅黑樹。

紅黑樹的增刪查的複雜度都是o(logn)。

另外還有就是充分應用「空間換時間」的手段

1:如byte資料中1 的個數,直接申請255個資料存放0~255中1的個數

2:如計算n陣列中任意n-1乘積的最大值,文中很巧妙的利用了兩個陣列分別表示前i-1個陣列的成績和後n-i個資料的成績。

一次掃瞄完成之後,這兩個陣列填滿。再遍歷一次,則可以依次計算出「分別去除當前第i個資料後的n-1個資料的乘積」,最後比較即可。

此時的複雜度為o(n)。至於後面的根據乘積和0比較則屬於資料本身分析,個人覺得不算演算法範疇提高。

最後就是關於dp,動態規劃方面的。

這塊還在學習中。。

最近看的一些讀書一

c primer,c 標準庫,泛型程式設計與stl,設計模式,uml精粹,stl原始碼分析,敏捷軟體開發 原則 模式與實踐 以上是我近3個月來讀的一些書,下面談談讀書的體會。總想跟上時代的發展,這是程式設計師的普遍想法。作為c程式設計師,想公升級為c 程式設計師的想法由來已久。我有大概5年以上的c ...

最近玩GAE的一些心得。。。

eclipse裡面下 url url 記住不要下gae sdk 和 gwt sdk,因為超慢,只需要下eclipse的plugin 就好了,關於sdk的jdo儲存要說明一下,說下gae裡面的一些缺陷。1.查詢 結果集的時候,必須使用一下list.size,不然直接關閉後是沒有相關的list資料的 p...

最近學習nosql看的一些資料

完成自己本年度最大的乙個專案之後,工作重點從pm的角色轉換到儲存相關的工作,因此工作之外花了一些時間關注了一下nosql相關的資料 主要來自blog.nosqlfan.com nosql相關 譯 nosql生態系統 url 這個是我看到的nosql講的最好,最完整的文件 我對nosql的一點理解 u...