erl_线性结构-折半查找
来源:互联网 发布:淘宝ipad货源 编辑:程序博客网 时间:2024/06/05 10:31
折半查找又叫二分查找:在有序表中,把待查找数据值与查找范围的中间元素值进行比较。
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
经常用于变动不平凡的数据结构。
代码如下:
%% 有序列表可以用折半查找 min->maxhalf_find([],_)-> false;half_find(List,Data)-> Len = length(List), HalfPos = ceil(Len/2), HalfData = lists:nth(HalfPos,List), {HList,TList} = lists:split(HalfPos,List), if Data > HalfData-> half_find(HList,Data); Data < HalfData-> half_find(TList,Data); true-> HalfData end.ceil(N) -> T = trunc(N), case N == T of true -> T; false -> 1 + T end.
总结:
其实这样的有序lists 和avl_tree 的查找差不错,gb_tree 的平衡(balance函数)处理就是先把二叉树变成有序lists让后再折半平衡重构。
感兴趣可以看看gb_tree 的balance代码
-spec balance(Tree1) -> Tree2 when Tree1 :: tree(Key, Value), Tree2 :: tree(Key, Value).balance({S, T}) -> {S, balance(T, S)}.balance(T, S) -> balance_list(to_list_1(T), S).balance_list(L, S) -> {T, []} = balance_list_1(L, S), T.balance_list_1(L, S) when S > 1 -> Sm = S - 1, S2 = Sm div 2, S1 = Sm - S2, {T1, [{K, V} | L1]} = balance_list_1(L, S1), {T2, L2} = balance_list_1(L1, S2), T = {K, V, T1, T2}, {T, L2};balance_list_1([{Key, Val} | L], 1) -> {{Key, Val, nil, nil}, L};balance_list_1(L, 0) -> {nil, L}.
0 0
- erl_线性结构-折半查找
- erl_线性结构
- erl_线性结构-Josephu(约瑟夫问题 )问题
- 线性查找和折半查找
- 数据结构之线性查找和折半查找
- 函数,结构体,折半查找
- 第十四周--线性表的折半查找
- 第十四周-线性表的折半查找
- java实现常用的查找(线性查找,折半查找)
- 数组元素查找中的线性查找和折半查找
- 查找算法练习一(线性查找+折半查找)
- 九度1069:查找学生信息(折半||线性查找)
- 查找——线性表的折半法查找
- 线性查找法————折半查找
- 11.静态查找.线性结构
- 数据结构例程——线性表的折半查找
- 第十四周--项目1线性表的折半查找
- 14周项目一线性表的折半查找
- iOS 数据持久化-----plist
- Verilog HDL语法基础
- 内核ASoC之path
- java计时
- iOS中正确的截屏姿势
- erl_线性结构-折半查找
- N宫格之横竖斜的和都相等
- Android webview 使用自定义自体
- 关于Ubuntu下移植数据库
- Spark on Yarn+Hbase环境搭建指南(五)HBase安装
- vc6.0快捷键汇总
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
- c语言之建立单链表
- Rendering with Vertex Lighting