标签: bisect

使用二分(在Python中)查找列表中f(x)更改的位置

推理:我试图在Python中实现类似的东西git bisect,但基本上是一个目录列表.

我有一个(长)版本号列表,如下所示: ['1.0', '1.14', '2.3', '3.1', '4']

我有一个函数works(),它取一个版本号,并返回一个值.

[works(x) for x in my_list]看起来像['foo', 'foo', 'foo', 'bar', 'bar'] ...... : 但是跑步works()非常昂贵.

我想做一些可以找到变化边界的二等分.

python git-bisect bisection bisect

8
推荐指数
1
解决办法
218
查看次数

bisect算法的复杂性是什么?

我编写代码来了解在搜索列表中的元素时哪些更快.事实证明是二等分.我不明白的是bisect算法的复杂性是什么,它是否使用Van Emde Boas树?

#python inbuilt list search using 'in' took 0.0702499200317 secs

def mul3():
    a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199]
    for x in a:
        if x in a:
            print x, "True"
        else:
            print x, "False"

#using bisect took 0.0649611193601

def mul4():
    a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199]
    import bisect
    for x in …
Run Code Online (Sandbox Code Playgroud)

python complexity-theory search list bisect

6
推荐指数
1
解决办法
6016
查看次数

python bisect.insort(list, value)

这个python模块是计算有序插入数据结构还是插入然后排序?自从开发了一种我必须牢记内存问题的算法以来,我一直在 python 中苦苦挣扎,因此需要一种方法将其插入到正确位置的列表中,因为它应该在 java 中使用链表完成,但不是确定使用什么以及如何使用。

任何帮助都感激不尽。

python module list insert bisect

6
推荐指数
1
解决办法
1万
查看次数

如何在TortoiseGit中完成'git bisect skip'?

TortoiseGit有一个用于运行Git Bisect的GUI.

然而,在二等分会话期间,上下文菜单仅提供"Bisect good","Bisect bad"和"Bisect reset".

有没有办法在没有使用命令行的开销的情况下进行'Bisect skip'?

git tortoisegit bisect

5
推荐指数
1
解决办法
349
查看次数

在元组列表上使用二等分,但仅使用第一个值进行比较

我阅读有关如何bisect在元组列表上使用的问题,并使用该信息来回答该问题。它有效,但我想要一个更通用的解决方案。

由于bisect不允许指定key函数,如果我有这个:

import bisect
test_array = [(1,2),(3,4),(5,6),(5,7000),(7,8),(9,10)]
Run Code Online (Sandbox Code Playgroud)

我想找到x > 5这些(x,y)元组的第一个项目(根本不考虑y,我目前正在这样做:

bisect.bisect_left(test_array,(5,10000))
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果,因为我知道noy大于 10000,所以将bisect我指向(7,8). 如果我1000换了,那就错了。

对于整数,我可以做

bisect.bisect_left(test_array,(5+1,))
Run Code Online (Sandbox Code Playgroud)

但在可能有浮点数的一般情况下,如何在不知道第二个元素的最大值的情况下做到这一点?

test_array = [(1,2),(3,4),(5.2,6),(5.2,7000),(5.3,8),(9,10)]
Run Code Online (Sandbox Code Playgroud)

我试过这个:

bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon,))
Run Code Online (Sandbox Code Playgroud)

它没有用,但我试过这个:

bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon*3,))
Run Code Online (Sandbox Code Playgroud)

它奏效了。但这感觉就像一个糟糕的黑客。任何干净的解决方案?

python comparison tuples bisect

5
推荐指数
1
解决办法
4366
查看次数

bisect.insort复杂性与预期不符

试图在python3中找到最优化的数据结构以解决一个更严重的问题,我不得不开发,这才刚刚意识到,使用模块二等分进行实时有序插入的复杂性不是O(nlog n),而是应该成倍增长。代替。不知道它的原因,所以感觉就像问你们,以防万一,因为我发现它真的很有趣。

想想我使用模块正确,所以这对我来说应该不是问题,无论如何,这里是用于插入节点对象的代码,用于确定随机f值节点的插入。

bisect.insort(self._frontier, (node._f, node))
Run Code Online (Sandbox Code Playgroud)

在几秒钟之内得到很多物体,但是随着时间的流逝就没有那么多。Bakuriu建议我问这个问题,因为他在进行了一些测试并得出与我相同的结果后也发现它很有趣。他用来测试的代码如下:

python3 -m timeit -s 'import bisect as B; import random as R;seq=[]' 'for _ in range(100000):B.insort(seq, R.randint(0, 1000000))'
Run Code Online (Sandbox Code Playgroud)

这些是他的结论:

10k插入都很好(到80ms为止,它基本上是线性扩展的(请记住,它是O(nlog n),所以比线性还差一点)),但是100k插入将永远花费而不是10倍以上。100k元素的列表实际上并不大,log(100k)为16,所以它并不大。

任何帮助都感激不尽!

python algorithm code-complexity bisect

5
推荐指数
1
解决办法
1428
查看次数

查找bisect python范围内的数字

我有一个整数列表,我想写一个函数,返回一个范围内的数字子集.像NumbersWithinRange(列表,间隔)函数名称...

也就是说,

list = [4,2,1,7,9,4,3,6,8,97,7,65,3,2,2,78,23,1,3,4,5,67,8,100]
interval = [4,20]
results = NumbersWithinRange(list, interval)  # [4,4,6,8,7,8]
Run Code Online (Sandbox Code Playgroud)

也许我忘了在结果中再写一个数字,但这就是想法......

该列表可以长达10/20百万,范围通常为几百.

关于如何使用python高效地完成任何建议 - 我正在考虑使用bisect.

谢谢.

python sorting binary search bisect

4
推荐指数
3
解决办法
4180
查看次数

rspec Bisect无限期运行

rspec --bisect在Circleci上运行时看到一些意外的行为。通常,二等分会无限期运行,直到5小时后超时。二分法最初似乎在起作用,但是一旦达到预期的终点,它就会开始缓慢地以相反的方向检查子集,直到超时为止。

我的环境:
Ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]
RSpec 3.7
- rspec-core 3.7.1
- rspec-expectations 3.7.0
- rspec-mocks 3.7.0
- rspec-rails 3.7.2
- rspec-support 3.7.1

命令:
DISABLE_SPRING=true RAILS_ENV=test bundle exec rspec #{all_specs} --order rand:21237 --bisect

Running suite to find failures... (1 minute 5.94 seconds)
Starting bisect with 1 failing example and 424 non-failing examples.
Checking that failure(s) are order-dependent... failure appears to be order-dependent

Round 1: bisecting over non-failing examples 1-424 .. multiple culprits detected - splitting …
Run Code Online (Sandbox Code Playgroud)

ruby rspec bisect circleci

4
推荐指数
2
解决办法
521
查看次数

git bisect 如何告诉我哪个合并破坏了 master 分支?

Git bisect 是分支感知的,所以它通常会很乐意冒险进入某个分支来测试这些提交。我对分支是否包含一些错误的提交不感兴趣。我感兴趣的是合并一个功能是否会破坏某些东西,本质上就像我将整个分支压缩成一个提交一样。

有没有一种方法可以指示 git bisect 留在给定的分支(右侧、左侧),以便我可以解决这个问题?

我看到的障碍是如果向后走要遵循哪个分支,但也许有某种方法可以处理这个问题?

git bisect

4
推荐指数
1
解决办法
147
查看次数

2D中两个向量的平分线(可以是共线的)

如何找到一般的两个向量的bisecor b =(bx,by)(我们考虑两个非零向量u =(ux,uy),v =(vx,vy),它们可以是共线的).

对于非共线矢量,我们可以写:

bx = ux/|u| + vx / |v|
by = uy/|u| + vy / |v|
Run Code Online (Sandbox Code Playgroud)

但对于共线矢量

bx = by = 0.
Run Code Online (Sandbox Code Playgroud)

例:

u = (0 , 1)
v = (0, -1)
b = (0, 0)
Run Code Online (Sandbox Code Playgroud)

math vector bisect

3
推荐指数
2
解决办法
7055
查看次数