Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 17 odgovora
  • 5.260 pregleda

Najnovija ↓

Fibonacci ali sa O(n) 17.03.2005. u 11:09 · pre 263 meseca #1
Treba mi pomoc :

Moram uraditi algoritam za fibbonaci niz ali sa vremenom O(n) plus mora biti rekurzivan.
Apsolutno mi ne pada na pamet kako

Fibbonaci niz : f(n) = ( 1 ako je n =< 2
f(n-1)+f(n-2) ako je n > 2 )


Pozdrav
Potpis
Free advice is seldom cheap.
Re: Fibonacci ali sa O(n) 17.03.2005. u 11:31 · pre 263 meseca #2
Nisam neki stručnjak za složenost, ali da pokušam:
Code:

using System;

namespace ConsoleApplication2
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: Add code to start application here
            //

            int a;
            int b;
            fib (7, out a, out b);
        }

        static void fib(int i, out int sa, out int sb) 
        {
            int sc;
            int sd;

            if (i <= 2) 
            {
                sa = 1; sb = 1;
            }
            else 
            {
                fib(i - 2, out sc, out sd);
                sa = sc + sd;
                sb = sd + sa;
            }
            Console.Write(sa.ToString() + " " + sb.ToString() + " ");
        }
    }
}
Re: Fibonacci ali sa O(n) 17.03.2005. u 12:04 · pre 263 meseca
izmenjeno 1 put, poslednji put Mihajlo Cvetanović 17.03.2005. u 14:20
  1. Mihajlo Cvetanović17.03.2005. u 14:20zapis iz teksta poruke
#3
Jel' ovo Java ili C#?

Sećam se da sam u C++ video rešenje koje koristi std::pair kao povratnu vrednost rekurzivne funkcije. To bi stvarno animiralo profesora...
Re: Fibonacci ali sa O(n) 17.03.2005. u 13:07 · pre 263 meseca #4
Citat:
Mihajlo Cvetanović: Jel' ovo Java ili C#?

C#. Da, pair bi super bio (vidiš, to mi nije palo na pamet), u .NET-u postoji, ali je smešten u Web namespaceu. U principu, uvek može da se napravi. ;)
Re: Fibonacci ali sa O(n) 17.03.2005. u 13:21 · pre 263 meseca #5
Rekurzivni fibonacci se racuna stvarno ako samo moras, za potrebe pokazivanja i rekurzije.

Fibonacci se moze izracunati i sa O(log n) ...
Re: Fibonacci ali sa O(n) 17.03.2005. u 14:45 · pre 263 meseca #6
Log n? Kako? Znam za računanje Fibonačijevog broja preko stepena zlatnog preseka (što bi bilo O(1)), ali za O(log n) nisam čuo.
Re: Fibonacci ali sa O(n) 17.03.2005. u 14:48 · pre 263 meseca #7
Ček ček jel vi pričate o nalaženju niza ili samo jedne vrednosti f(n)?
Re: Fibonacci ali sa O(n) 17.03.2005. u 14:55 · pre 263 meseca #8
Jedne vrednosti ...

Pogledacu kuci algoritam za O(log n), nije bas trivijalan.

Stepen (pa i zlatnog preseka) nije O(1), jer za racunanje stepena treba vise nego konstantno vreme.
Re: Fibonacci ali sa O(n) 17.03.2005. u 15:37 · pre 263 meseca #9
Hvala na odgovoru .

Posto mi ne radimo c# nego neki pseudo jezik imam jos jednom pitanje.

Kada incijalizujes sc i sd njihova pocetna vrednost je nula ili ... ?

Potpis
Free advice is seldom cheap.
Re: Fibonacci ali sa O(n) 17.03.2005. u 15:54 · pre 263 meseca
izmenjeno 1 put, poslednji put Damjan S. Vujnovic 17.03.2005. u 15:57
  1. Damjan S. Vujnovic17.03.2005. u 15:57zapis iz teksta poruke
#10
U vezi sa O(log n) algoritmom...

http://en.wikipedia.org/wiki/F...number_program#Matrix_equation

pogledati po "Matrix equation".

Ideja je da se n-ti stepen matrice nadje sukcesivnim kvadriranjima i ocigledno je primenljiva i na onu formulu sa sqrt(5) (zlatni presek, kao sto neko vec rece), ali kada se koristi matrica nema problema sa ne-celim brojevima i tacnosti.

D.
Potpis
I love the smell of copyright violations in the morning. Smells like... freedom!
Re: Fibonacci ali sa O(n) 17.03.2005. u 15:55 · pre 263 meseca #11
Ako malo bolje proučiš kood, videćeš da je nebitna inicijalna vrednost te dve promenljive, pošto se one pune rekurzivnim pozivom funkcije, tj. inicijalizuje ih funkcija, vrativši rezultat u njima.

Pseudokodno, onaj rekurzivni poziv je ustvari (sc, sd) = fib(i - 2). Ok?
Re: Fibonacci ali sa O(n) 17.03.2005. u 16:12 · pre 263 meseca #12
Sad je sve jasno. Imas pivo kad navratim do BG-a . ;)
Potpis
Free advice is seldom cheap.
Re: Fibonacci ali sa O(n) 04.04.2005. u 18:02 · pre 262 meseca #13
Pa mogla bi se ta složenost uhvatiti sa metodom memoizacije, evo primjera:

Code:

#include <iostream>
using namespace std;

int niz[100] = { 0 };

int fib( int n )
{
    if( n == 0 ) return 0;
    else if( n == 1 ) return 1;
    else if( niz[n] > 0 ) return niz[n];
    else
    {
        //Memoizacija
        niz[n] = fib( n - 1 ) + fib( n - 2 );
        return niz[n];
    }
}

int main()
{
    int n; cin >> n;
    
    niz[0] = 0;
    niz[1] = 1;
    
    cout << fib( n ) << endl;
    return 0;
}

Re: Fibonacci ali sa O(n) 04.04.2005. u 18:27 · pre 262 meseca #14
Interesantno, ovako ti treba i mesta O(n), sto nije zanemarivo. Doduse, dobijes sve Fibonaccijeve brojeve do n-tog ...
Re: Fibonacci ali sa O(n) 04.04.2005. u 20:03 · pre 262 meseca #15
Da ali je puno brze i isplativije i jednom kad ih izracunas imas O(1) za dobiti bilo koji
fibonacciev broj.
Re: Fibonacci ali sa O(n) 04.04.2005. u 23:00 · pre 262 meseca #16
Citat:
bags:
Moram uraditi algoritam za fibbonaci niz ali sa vremenom O(n) plus mora biti rekurzivan.

:) Dakle ceo niz + rekurzivan + O(n), tako da je samo ovo poslenje rešenje ispravno, kako se meni čini

BTW, da nije uslov rekurzija i da ne treba ceo niz, moglo bi na još par načina da se odradi, evo nešto napamet, moguće je i da ne radi tačno, ali bar je ideja tu
Code:
// O(n)
int fibonaci1(int n)
{
    int f2 = 1;    // f(0) = 1
    int f1 = 1;     // f(1) = 1
    int i;
    for(i=2; i<=n; i++)
    {
        f = f2 + f1;
        f2 = f1;
        f1 = f;
    }
    return f;
}
// O(1) - uslovno, ako zanemarimo slozenost funkcije pow
int fibonaci2(int n)
{
    float sqrt5 = pow(5, 0.5) / 0.5;    
    return (int) ((pow(0.5 + sqrt5, n) - pow(0.5 - sqrt5, n)) / (sqrt5 * 2.0));
}
Potpis
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Re: Fibonacci ali sa O(n) 06.04.2005. u 02:16 · pre 262 meseca #18
Pa u tvom rešenju je ima, ko što rekoh:
Citat:
trooper: Dakle ceo niz + rekurzivan + O(n), tako da je samo ovo poslenje rešenje ispravno, kako se meni čini

a ova moja rešenja sam poslao čisto informativno, ko što sam naglasio:
Citat:
trooper: da nije uslov rekurzija i da ne treba ceo niz


damn, mrzim da sam sebe citiram.
Potpis
ex. trooper
Oh goody... it's my Illudium PU-36 Explosive Space Modulator!
Softversko Inženjerstvo
♪♫♪
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme