Tid kompleksitet rekursiv algoritme

stemmer
0

Jeg har et rutenett med x -sided feltet i den. Hvert felt inneholder en link til det er x omkringliggende felt. [ X er konstant ]

Jeg har en algoritme som er implementert i dette felt, (som sannsynligvis kan optimaliseres):

[Java som pseudo]

public ArrayList getAllFields(ArrayList list) {

  list.addToList(this);

  for each side {
    if ( ! list.contains(neighbour) && constantTimeConditionsAreMet()) {
      neighbour.getAllFields(list) //Recursive call
    }
  }

  return list;

}

Jeg har problemer med å finne tid kompleksitet.

  • ArrayList#contains(Object) kjører i lineær tids
  • Hvordan finner jeg tid kompleksitet? Min tilnærming er dette:

    T(n) = O(1) + T(n-1) +
    c(nbOfFieldsInArray - n) [The time to check the ever filling ArrayList]
    
    T(n) = O(1) + T(n-1) + c*nbOfFieldsInArray - cn
    

    Betyr dette gi meg T(n) = T(n-1) + O(n)?

    Publisert på 26/04/2011 klokken 19:04
    kilden bruker
    På andre språk...                            


    2 svar

    stemmer
    2

    Kommentaren du har lagt til koden er ikke nyttig. Hva gjør getContinentgjøre?

    I alle fall, siden du bruker en lineær søk ( ArrayList.contains) for alle potensielle tillegg til listen, så det ser ut som kompleksiteten vil være Omega (n ^ 2).

    Svarte 26/04/2011 kl. 19:51
    kilden bruker

    stemmer
    1

    Du tilbakefall virker riktig T(n) = T(n-1) + theta(1).

    Hvis du tegner rekursjonen treet du vil legge merke til du har en enkelt gren med verdiene theta(n-1), theta(n-2), ..., theta(2), theta(1), hvis du legger sammen alle nivåene du få aritmetisk serie 1 + 2 + 3 + ... + n

    S1 = 1+2+3+...+n
    

    Hvis du definerer

    S2 = n+...+3+2+1
    

    og deretter beregne S1+S2du får

    S1 + S2 = 2*S1 = (n+1) + (n+1) + ... + (n+1) = n(n+1)
    

    derfor

    2*S1 = n(n-1) => S1 = n(n-1)/2
    

    som betyr T(n) = 1/2 theta(n(n-1)) = 1/2 theta(n^2) = theta(n^2)

    Svarte 03/12/2015 kl. 04:39
    kilden bruker

    Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more