Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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 优化合并间隔问题(使用bfs)_Python_Breadth First Search - Fatal编程技术网

Python 优化合并间隔问题(使用bfs)

Python 优化合并间隔问题(使用bfs),python,breadth-first-search,Python,Breadth First Search,我正在处理一个合并重叠间隔的问题: 问题链接: 我试图为这个问题实现bfs,因为……为什么不呢 我找到的解决方案效果很好。当数据集非常大时,问题就会出现。与解决此问题的其他方法相比,它变得相对缓慢。我想尽可能地优化这段代码,这样它就不会那么慢了 我尝试了字典查找,设置为查找以检查节点是否被访问。不过,解决方案并没有显示出显著的改进。请告诉我怎样才能快点。我认为它目前运行在O(nlogn)+O(n)中 def merge_图(间隔、访问、i): #打印(“----”) q=deque() q、 追

我正在处理一个合并重叠间隔的问题: 问题链接:

我试图为这个问题实现bfs,因为……为什么不呢

我找到的解决方案效果很好。当数据集非常大时,问题就会出现。与解决此问题的其他方法相比,它变得相对缓慢。我想尽可能地优化这段代码,这样它就不会那么慢了

我尝试了字典查找,设置为查找以检查节点是否被访问。不过,解决方案并没有显示出显著的改进。请告诉我怎样才能快点。我认为它目前运行在O(nlogn)+O(n)中

def merge_图(间隔、访问、i):
#打印(“----”)
q=deque()
q、 追加((区间[i][0],区间[i][1]))
已访问。添加(i)
临时结果=[]
#临时结果追加(间隔[i][0])
开始\u lim=sys.maxsize
end_lim=-sys.maxsize
而q:
#打印(q)
左,右=q.popleft()
启动极限=最小值(启动极限,左侧)
end_lim=最大值(end_lim,右)
对于范围内的j(长度(间隔)):

如果j不在visited and right>=Interval[j][0]和Left中,则算法的运行时不是O(n log n)。BFS将访问每个间隔,然后对于每个间隔,您将再次遍历整个间隔列表。因此,算法的这一部分给出了O(n^2),它支配着运行时。算法的运行时不是O(n logn)。BFS将访问每个间隔,然后对于每个间隔,您将再次遍历整个间隔列表。因此,算法的这一部分给出了O(n^2),它支配着运行时。
def merge_graph(intervals,visited,i):
    #print ("-----")
    q=deque()
    q.append((intervals[i][0],intervals[i][1]))
    visited.add(i)
    temp_result=[]
    #temp_result.append(intervals[i][0])
    start_lim=sys.maxsize
    end_lim=-sys.maxsize
    while q:
        #print (q)
        left,right=q.popleft()
        start_lim=min(start_lim,left)
        end_lim=max(end_lim,right)
        for j in range(len(intervals)):
            if j not in visited and right>=intervals[j][0] and left<=intervals[j][1]:
                visited.add(j)
                q.append((intervals[j][0],intervals[j][1]))
    temp_result.append(start_lim)
    temp_result.append(end_lim)
    return (temp_result)
n=len(intervals)
visited=[0]*(n+1)
#uncomment this line for result is sorted order
#intervals.sort()
merged_intervals=[]
visited=set()
for i in range(n):
    if i not in visited:
        merged_intervals.append(merge_graph(intervals,visited,i))
return (merged_intervals)