這幾天看mysql索引的知識,了解到btree資料結構,無聊想挑戰一下去實現一下,btree的資料結構特點我就不介紹,具體的**請檢視這個鏈結我比較笨,不會使用畫圖軟體?
<?php
//存放每乙個資料的容器
class
ceil}//
class
unit
//新增ceil
public
function
add_ceil
($ceil
)return
$this;}
//min -> max sort 插入ceil的值與佇列進行排序,返回插入ceil所需要點位置及其unit例項
public
function
find_node
(unit $unit
,ceil $ceil
)//非0位置,切當前unit前乙個位置存在右unit,則遞迴查詢if(
$pointer_position
>0&&
$pointer_item
->
right
!=null
)return
['unit'
=>
$unit
,'position'
=>
$pointer_position];
}//獲取插入ceil在當前unit中的位置
public
function
get_sort
($items
,$ceil
,$position_limit
=false
)elseif(
$items
[$position]-
>
index
>
$ceil
->
index)if
($items
[$position]-
>
index
<
$ceil
->
index
&&$items
[$position+1
]->
index
>
$ceil
->
index)}
}if(!
$position_limit
)return
$pointer_position;}
//執行**操作
public
function
division
($unit
)$middle_ceil[0
]->
right
=$right_unit
;$left_unit
->
parent
=$right_unit
->
parent
=$unit;}
else}}
public
function
insert_parent
($parent
,$ceil
,$left_unit
,$right_unit
)$ceil
->
right
=$right_unit
;//判斷**後的節點插入父unit後是否是佇列的最左側,僅當左端**存在此現象if(
$position!=0
)else
$left_unit
->
parent
=$right_unit
->
parent
=$parent
;array_splice
($parent
->
items
,$position,0
,[$ceil])
;return
$parent;}
}//class
btree
//執行資料填充動作
public
function
format
($data
)return
$this;}
}$data=[
2,1,
7,6,
11,4,
8,13,
10,5,
17,9,
16,20,
3,12,
14,18,
19,15]
;$root
=new
unit([
newceil
(array_shift
($data))
]);$fork_num=5
;$b_tree_root
=new
btree
($root
,$fork_num);
$b_tree
=$b_tree_root
->
format
($data);
var_dump
($b_tree
);
BTree和B Tree 簡單區別
本篇作用於各種樹之間的區別,非演算法詳細介紹,只是給我們這種非科班出身的一種大概的印象,現在網上更多是講各種樹的怎麼實現的細節問題,本篇不涉及那麼高深,如果詳細了解可以查閱他人的資料,很多大神已經說的很多了 二叉樹效果 這個是我們想象中的本應該的樹的資料結構。可是他存在一種極端的情況 他的查詢效率就...
BTree和B Tree 簡單區別
本篇作用於各種樹之間的區別,非演算法詳細介紹,只是給我們這種非科班出身的一種大概的印象,現在網上更多是講各種樹的怎麼實現的細節問題,本篇不涉及那麼高深,如果詳細了解可以查閱他人的資料,很多大神已經說的很多了 二叉樹效果 這個是我們想象中的本應該的樹的資料結構。可是他存在一種極端的情況 他的查詢效率就...
PHP實現基於Swoole簡單的HTTP伺服器
引用swoole官方定義 php語言的非同步 並行 高效能網路通訊框架,使用純c語言編寫,提供了php語言的非同步多執行緒伺服器,非同步tcp udp網路客戶端,非同步mysql,資料庫連線池,asynctask,訊息佇列,毫秒定時器,非同步檔案讀寫,非同步dns查詢。swoole可以廣泛應用於網際...