Comments (3)
def bin_find_v3(v, lo, hi, e):
if lo < hi - 1:
mi = (lo + hi) // 2
if e < v[mi]:
hi = mi
else:
lo = mi
return bin_find_v3(v, lo, hi, e)
return (lo if v[lo] == e else -1)
v = [1, 2, 3, 4, 5, 6, 7]
bin_find_v3(v, 0, len(v), 4)
版本三:两个区间的二分查找,查找不到时返回 -1
Python tutor 演示链接
from learning_list.
def bin_find_v4(v, lo, hi, e):
if lo < hi:
mi = (lo + hi) // 2
if e < v[mi]:
hi = mi
else:
lo = mi + 1
return bin_find_v4(v, lo, hi, e)
return lo - 1
v = [1, 2, 3, 4, 5, 6, 7]
bin_find_v4(v, 0, len(v), 4)
版本四:两个区间的二分查找,返回不大于e的最后一个元素的 rank
Python tutor 演示链接
from learning_list.
def bin_find_v1(v, lo, hi, e): if lo >= hi: return -1 else: mi = (lo + hi) // 2 if v[mi] == e: return mi if v[mi] > e: return bin_find_v1(v, lo, mi, e) else: return bin_find_v1(v, mi+1, hi, e) v = [1, 2, 3, 4, 5, 6, 7] bin_find_v1(v, 0, len(v), 3)版本一:三个区间的二分查找,且头尾区间不均衡。
Python tutor 演示链接
版本 2: 黄金分割二分查找
def bin_find_v2(v, lo, hi, e):
fib = Fib(hi - lo)
while lo < hi:
while hi - lo < fib.get():
fib.prev()
mi = lo + fib.get() - 1
if e < v[mi]:
hi = mi
elif e > v[mi]:
lo = mi
else:
return mi
return -1
class Fib(object):
def __init__(self, n):
self._f = 1
self._g = 0
while self._g < n:
self.next()
def next(self):
self._g, self._f = self._g + self._f, self._g
return self._g
def prev(self):
self._g, self._f = self._f, self._g - self._f
return self._g
def get(self):
return self._g
v = [1, 2, 3, 4, 5, 6, 7]
print(bin_find_v2(v, 0, len(v), 5))
from learning_list.
Related Issues (20)
- 给函数式程序员的 Hack Pipe:我如何学着停止担忧并爱上那顶小帽子 HOT 1
- 一文说透 TypeScript 的增删查改
- 重温 React hook 基本原理
- rust 中消失的三元去了哪里?
- 如何判断类型中是否有必填字段
- automate chrome by script kit
- applescript 踩坑经验
- hammerspoon 添加自定义菜单,执行 shell 脚本
- karabiner multitouch_extension
- 我的 Mac 使用实践总结
- 活久见之 JS 新见闻:return 写不写还是有关键区别的。
- Rust trait vs TypeScript interface
- React Final Form useFormValuesWatch
- data fetch in react
- type safe useParams
- finally, learn how generate struct with builtin function in Zig
- zig code: auto git push, find suitable target branch and open merge url in browser
- bun preloader for test
- depth protection and loose union
- 初步建立起 RSC 的直观体验 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from learning_list.