我设计了算法并实现了代码,但我不知道代码的时间复杂度T(n)= O(??)

问题描述 投票:0回答:1
  1. 我使用了很多for循环来获取壁橱中较小和较大的元素,因此我很难分析这段代码的时间复杂度。
  2. 我定义了一个名为FindClosetLagerAndLower的函数,输入一个数组,结果它将分别返回两个名为L,R的数组。 L存储每个元素的最低壁橱索引。R存储每个元素的最高壁橱索引。
# encoding: utf-8
def FindClosetLagerAndLower(Array):
    L = list()
    R = list()
    LH = list()
    RH = list()
    if len(Array)%2==0:
      half = len(Array)/2 
      firstHalf = Array[0:half]
      secondHalf = Array[half:len(Array)]
    else:
        half = len(Array)/2 
        firstHalf = Array[0:half+1]
        secondHalf =Array[half+1:len(Array)]
    for i in range(len(firstHalf)):
        count = 0
        if i == 0:
            L.append(-1)
        for j in range(i-1,-1,-1):
            if(firstHalf[i]<firstHalf[j]):
                L.append(j)
                break
            elif(firstHalf[i]>=firstHalf[j]):
                count = count + 1
                if(count== i):
                    L.append(-1)
    R = [-1]*len(firstHalf)
    for i in range(len(firstHalf)):
        count = 0
        for j in range(i+1,len(firstHalf)):
            if(firstHalf[i]<firstHalf[j]):
                 R[i] = j
                 break
            elif(firstHalf[i]>firstHalf[j]):
                count = count+1
                if(count == len(firstHalf)-i+1):
                    R[i]==[-1]

    for i in range(len(secondHalf)):
        count = 0
        if i == 0:
            LH.append(-1)
        for j in range(i-1,-1,-1):
            if(secondHalf[i]<secondHalf[j]):
                LH.append(j+len(firstHalf))
                break
            elif(secondHalf[i]>=secondHalf[j]):
                count = count + 1
                if(count== i):
                    LH.append(-1)
    RH = [-1]*len(secondHalf)
    for i in range(len(secondHalf)):
        for j in range(i+1,len(secondHalf)):
            if(secondHalf[i]<secondHalf[j]):
                RH[i] = j+len(firstHalf)
                break
            elif(secondHalf[i]>secondHalf[j]):
                count = count + 1
                if(count == len(secondHalf)-i+1 ):
                    RH[i] = -1



    for i in range (len(firstHalf)):
        for j in range(len(secondHalf)):
            if(R[i]==-1 and firstHalf[i]<secondHalf[j]):
                R[i] = j+len(firstHalf)
                break
    for i in range(len(secondHalf)):
        for j in(range(len(firstHalf)-1,-1,-1)):
            if(LH[i]==-1 and firstHalf[j]>secondHalf[i]):
                LH[i] = j
                break
    R = R + RH
    L = L + LH
    return L,R

A= [4,2,3,1,8,5,6,9]
L,R = FindClosetLagerAndLower(A)
print(L)
print(R)
python algorithm time-complexity divide-and-conquer
1个回答
2
投票

normal-O(n ^ 2)最佳情况-O(n ^ 2)

© www.soinside.com 2019 - 2024. All rights reserved.