Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google CodeJam过去练习-减少运行时间_Python_Algorithm - Fatal编程技术网

Python Google CodeJam过去练习-减少运行时间

Python Google CodeJam过去练习-减少运行时间,python,algorithm,Python,Algorithm,从2010年开始,我一直在研究一个Google Codejam算法,但时间复杂度非常糟糕 以下是来自Google Codejam的问题: TLDR-想象两座塔的侧面有一条数字线,我们从一个建筑数字线(比如从10开始)到另一个建筑数字线(比如从1开始)上的另一点画一条线。如果我们这样做n次,这些线会相交多少次 我想知道这里是否有人能提出一种方法来加速我的算法?4个小时后,我真的看不见了,我的Miinnnddd也丢了 这是我现在的代码 输入的一个例子是: 2-(案件数量) 3-(情况#1中的导线数量

从2010年开始,我一直在研究一个Google Codejam算法,但时间复杂度非常糟糕

以下是来自Google Codejam的问题:

TLDR-想象两座塔的侧面有一条数字线,我们从一个建筑数字线(比如从10开始)到另一个建筑数字线(比如从1开始)上的另一点画一条线。如果我们这样做n次,这些线会相交多少次

我想知道这里是否有人能提出一种方法来加速我的算法?4个小时后,我真的看不见了,我的Miinnnddd也丢了

这是我现在的代码

输入的一个例子是:

2-(案件数量)

3-(情况#1中的导线数量)

110

5.5

7 7

案例1:2-(1、10、5、5、7、7号线之间的两个交点)

2-(第2种情况下的电线数量)

5.5

2.2

案例2:0-(没有线相交)

这个算法确实适用于我给它的任何输入,但正如我所说的,它非常丑陋和缓慢


谢谢你的帮助

因为
N
是1000,所以可以接受带有
O(N^2)
的算法。所以你要做的就是按一个端点对电线进行排序

//sorted by first number
1 10    
5 5
7 7
然后从一开始处理每条线,并检查它是否与前面的线相交。如果一条直线前面的第二个端点大于当前直线的第二个端点,则它们具有交点。这需要两个循环,因此
O(N^2)
复杂度足以满足
N=1000

您也可以将其解释为反转计数。您必须计算第二个端点的反转数,其中列表按第一个端点排序

10 5 7 ->‌ number of inversions is 2, because of (10,5) and (10,7)

还有一个问题是计算这个问题不需要的倒数。

我想你会在那里得到更好的答案,我会在那里贴两封感谢信。我想这里可能也离题了
10 5 7 ->‌ number of inversions is 2, because of (10,5) and (10,7)