- 浏览: 247137 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (127)
- vim (3)
- python (44)
- pymysql (1)
- mysql (9)
- macvim (1)
- erlang (3)
- twisted (0)
- tornado (5)
- django (7)
- postgresql (5)
- sql (1)
- java (7)
- tech (4)
- cache (1)
- lifestyle (3)
- html (1)
- ubuntu (2)
- rabbitmq (1)
- algorithm (8)
- Linux (4)
- Pythonista (1)
- thread (1)
- sort (6)
- 设计模式 (1)
- search (1)
- Unix (6)
- Socket (3)
- C (2)
- web (1)
- gc (1)
- php (10)
- macos (1)
最新评论
-
2057:
这个程序有bug。
查找算法学习之二分查找(Python版本)——BinarySearch -
dotjar:
NB
一个Python程序员的进化[转]
引用
在计算机科学中,折半搜索,也称二分查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
- 时间复杂度:O(logn)
- 空间复杂度:O(1)
示例:
#!/usr/bin/env python #-*-coding:utf-8-*- def binary_search(l,key,lo=0,hi=None): if not hi: hi = len(l) while lo<hi: mid = (lo+hi)//2 if l[mid]>key: hi = mid-1 elif l[mid]<key: lo = mid+1 else: return mid return -1 def main(): L = [1,2,3,4,5,6] print binary_search(L,6) if __name__=="__main__": main()
参考资料:
http://zh.wikipedia.org/wiki/%E6%8A%98%E5%8D%8A%E6%90%9C%E7%B4%A2%E7%AE%97%E6%B3%95
发表评论
-
macos 10.9.2 clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command
2014-03-25 19:13 1759方法总是有的,当然需要你去寻找。 当然如果花费太多的时间在一件 ... -
PostgreSQL psycopg2:IndexError: tuple index out of range
2014-01-09 17:04 2231Postgresql psycopg2使用like查询的时候 ... -
Python 迭代器和生成器
2013-10-15 23:09 2849迭代器 迭代器只不过是一个实现迭代器协议的容器对象。它基于两个 ... -
Python时间模块
2013-10-15 23:03 3469time模块 时间模块中最常用的一个函数就是获取当前时间的函数 ... -
Python装饰器
2013-10-15 22:59 1568编写自定义装饰器有许多方法,但最简单和最容易理解的方法是编写一 ... -
python list
2013-10-15 22:56 1254简单总结以及整理如下: >>> dir( ... -
Python Excel
2013-09-10 17:21 975安装lib easy_install xlrd def ... -
排序算法学习(python版本)之堆排序(HeapSort)
2013-07-01 22:54 1996Contains: 堆排序以及堆排序的应用 堆排序(Heaps ... -
python range xrange
2013-06-25 23:30 1149引用Help on built-in function ran ... -
python class
2013-06-25 00:54 1829引用类是创建新对象类 ... -
AttributeError: 'module' object has no attribute 'SendCloud'
2013-06-05 11:46 7083网上查了下 意思是说你命名的文件名不能和lib重名,这样会导 ... -
python string
2013-05-07 23:44 2198如果这就是字符串,这本来就是字符串 首先看下字符串的方法 ... -
Python property
2013-03-29 19:56 0由于之前有总结过,可以参考http://2057.iteye. ... -
python tips
2013-03-28 23:57 8831、enum #!/usr/bin/env python ... -
python decorators
2013-03-28 23:36 1365Contains: 1、decorators 2、funct ... -
python closures
2013-03-28 22:09 1190Closure:如果在一个内部函数里,对在外部作用域(但不是在 ... -
Python map、filter,reduce介绍
2013-03-28 22:02 13091、filter(function,iterable) 引用C ... -
Python __new__ 、__init__、 __call__
2013-03-26 23:49 5351Contains: __new__: 创建对象时调用,返回当 ... -
Python socket简介
2013-03-25 23:42 2168自豪地使用dir和help. Python 2.7.2 ( ... -
Tornado ioloop源码简析
2013-03-21 00:18 2849#!/usr/bin/env python #-*-en ...
相关推荐
查找算法通常分为线性查找、二分查找和哈希查找等不同类型,每种方法都有其适用的场景和优缺点。 以实验中的例子为例,我们有一个数列:16、25、39、27、12、8、45、63,目标是在这个数列中找到数字12。线性查找是...
### 二分查找图解方法——算法的基本之一 #### 知识点概述 二分查找是一种在有序数组中查找特定元素的高效算法。其基本思想是通过将目标值与数组中间元素进行比较来缩小搜索范围,从而达到快速查找的目的。在最坏...
在Python中实现二分查找,可以编写如下的函数模板: ```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left mid = (left + right) // 2 if arr[mid] == target: return mid ...
对于有序数组或列表的查找操作,有一种高效的算法——**二分查找**(也称作折半查找)。本文将详细介绍Python中实现二分查找的方法,并通过具体的代码示例来帮助读者理解这一算法的工作原理及其应用场景。 #### 二...
本文详细介绍了四种常见的Python基础算法——冒泡排序、二分查找、斐波那契数列以及归并排序,并提供了相应的Python实现代码。这些算法不仅对于初学者来说是很好的学习材料,同时也为高级开发人员提供了快速参考。...
这个库的核心功能是对列表进行二分查找(binary search),这是一种高效的搜索算法,特别适合在已排序的序列中寻找特定元素。 二分查找算法的原理是将目标值与序列中间元素进行比较,根据比较结果缩小搜索范围,再...
- **搜索算法**:包括顺序搜索(Sequential Search)、二分搜索(Binary Search)等。 - **图算法**:如广度优先搜索(Breadth-First Search, BFS)、深度优先搜索(Depth-First Search, DFS)、最短路径算法(Dijkstra's ...
- `binary_search.py` 和 `linear_search.py` 文件分别可能包含了二分查找和线性查找算法的实现。二分查找适用于已排序的数组,其时间复杂度为 O(log n),而线性查找则适用于任意顺序的列表,时间复杂度为 O(n)。在...
3. **二分查找**(Binary Search):二分查找适用于有序数组,通过不断将查找区间减半来快速定位目标值,具有较高的查找效率。 4. **大整数乘法**(Large Integer Multiplication):如Karatsuba算法,通过分治策略...
- **应用场景**:二分查找是一种高效的查找方法,尤其适用于大型有序数组。 - **示例代码**: ```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left mid = (left + right) //...
3. 排序与搜索:快速排序、归并排序、二分查找等的实现。 4. 动态规划问题:0/1背包问题、最长递增子序列、斐波那契数列等。 5. 栈和队列的应用:括号匹配、先进先出(FIFO)操作、拓扑排序等。 通过这些实践代码...
在LeetCode上,无论是动态规划、贪心算法,还是二分查找、回溯法,都可以用这两种语言灵活实现。 在实际解题过程中,理解题意是关键的第一步。通过对题目描述的深入分析,明确问题的核心需求,然后选择合适的算法或...
再如"Binary Search"(二分查找),它是一种高效的搜索算法,适合在有序数据中查找特定元素。 此外,设计模式也是LeetCode习题中不容忽视的部分。如"Design Twitter"(设计推特),需要理解并应用到队列、栈以及...
2. 算法应用:排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如二分查找、深度优先搜索、广度优先搜索)以及动态规划、贪心算法等在LeetCode上都有丰富的实践。比如,"Merge Intervals"问题,需要将时间...