原创 高級數據結構---B樹和B+樹及mysql索引分析 mysql索引數據結構:

mysql索引數據結構:https://www.cnblogs.com/nijunyang/p/11406688.html   幾種樹結構的對比:   二叉查找樹:二叉搜索樹,二叉排序樹,優點查找快,但是在某些情況下會退化成鏈表,它是所有高

原创 高級數據結構---紅黑樹及其插入左旋右旋代碼java實現

前面我們說到的二叉查找樹,可以看到根結點是初始化之後就是固定了的,後續插入的數如果都比它大,或者都比它小,那麼這個時候它就退化成了鏈表了,查詢的時間複雜度就變成了O(n),而不是理想中O(logn),就像這個樣子      如果我們有一個

原创 高級數據結構---二叉查找樹及其增刪改查實現

二叉樹查找樹: 二叉查找樹也叫二叉搜索樹,二叉排序樹。它也是一種特殊的二叉樹, 它具有以下特點 1.如果它的左子樹不爲空,則左子樹上結點的值都小於根結點。 2.如果它的右子樹不爲空,則右子樹上結點的值都大於根結點。 3.子樹的子樹同樣也要遵

原创 高級數據結構---二叉樹

樹是一種一對多的數據結構,之前的數組,棧這些都是一對一的數據結構。 樹是n個結點的有限集。n=0稱空樹。在任意一棵非空樹中:有且僅有一個根(root)結點;n>1時,其餘結點可分爲m個互不相交的的有限集,其中每個集合又是一棵樹,稱爲根的子樹

原创 算法---貪心算法和動態規劃

貪心算法顧名思義在一個貪字上面,它在解決某個問題的時候,總是先從眼前利益出發。也就是說只顧眼前,不顧大局,所以它是局部最優解。它的核心的就是局部最優推出全局最優。   比如公司只有一個會議室,明天有幾場同樣的重要的會議要開,怎麼安排會議才能

原创 算法---遞歸及尾遞歸

什麼叫遞歸?舉個例子,我們排隊,想知道自己排在第幾個,那麼我們可以問前面的那個人,前面的人繼續問前面,直到問到第一個人,這就是傳遞的過程。然後再從第一個人回來,這就是歸(回溯)的過程。傳遞過去再回歸回來,這就是遞歸。第一個人就是我們所說的遞

原创 ScheduledThreadPoolExecutor之remove方法

之前用定時任務的線程池,設置了個任務,但是突然今天產品說,某些個操作需要中斷某些任務(如果任務還沒有執行),使其不能再到點執行了。於是查了API果然有這樣一個方法。   一看API,需要移除的是一個Runnable對象,想當然的就把任務調

原创 數據結構---隊列及簡單實現有界隊列

隊列也是一種特殊的線性表,它只允許在兩端進行操作,插入或者取出,不允許操作中間的數據。比如只允許在對頭出隊,隊尾入隊。這樣就具有先進先出的特性(first in first out-FIFO)。就像排隊買東西一樣,不允許插隊,先排先買。 隊

原创 數據結構---棧及四則運算實現

假設我們要求輸入類似這樣一個表達式:9+(3-1)*3+10/2,輸出結果。我們知道先括號,再乘除,最後加減,中學時候使用的科學計算器,是允許輸入這樣的表達式計算結果的,那麼計算機怎麼知道這個串裏面先算括號再算乘除呢?我們先來介紹下棧這種數

原创 數據結構---鏈表及約瑟夫環問題帶來的思考

鏈表和數組一樣也是線性表的一種。和數組不同,它不需要再內存中開闢連續的空間。 鏈表通過指針將一組零散的內存塊連接在一起。我們把內存塊稱爲鏈表的“結點”(是節點還是結點,結點連接起來打個結所以叫“結點”?開個玩笑),也就是說這些結點可以在內存

原创 數據結構---數組

線性表,顧名思義就像一條線一樣,線性表是有序的,這個“有序”不是從小到大之類的概念。當然與之對應就是散列表,散就是亂的,無序的。Java中List和Set,我們遍歷List每次結果都是一樣,這就是所謂的有序,遍歷Set,每次出來的結果可能都

原创 時間複雜度和空間複雜度

時間複雜度和空間複雜度是我們算法效率的度量方法。   時間複雜度我們用大O表示法,比如O(1),O(n),O(logn),O(n2)等,那麼這個是怎麼計算出來的呢。   簡單來說就是看某段代碼的執行次數。 注意:   1.如果是常數級別的都

原创 Elasticsearch基礎入門 Centos7安裝Elasticsearch和Kibana 搜索引擎基礎---分詞和倒排索引簡述

Centos7安裝Elasticsearch和Kibana 搜索引擎基礎---分詞和倒排索引簡述 此前的es和kibana安裝 Elasticsearch是什麼? ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分

原创 搜索引擎基礎---分詞和倒排索引簡述

搜索引擎是什麼? 所謂搜索引擎,就是根據用戶需求與一定算法,運用特定策略從互聯網檢索出制定信息反饋給用戶的一門檢索技術。搜索引擎依託於多種技術,如網絡爬蟲技術、檢索排序技術、網頁處理技術、大數據處理技術、自然語言處理技術等,爲信息檢索用戶提

原创 淺析Redis分佈式鎖---從自己實現到Redisson的實現

當我們在單機情況下,遇到併發問題,可以使用juc包下的lock鎖,或者synchronized關鍵字來加鎖。但是這倆都是JVM級別的鎖,如果跨了JVM這兩個鎖就不能控制併發問題了,也就是說在分佈式集羣環境中,需要尋求其他方法來解決併發問題。