huso42 Posted April 28, 2013 Share Posted April 28, 2013 Fibonacci Search technique hakkında detaylı bir rapor ödevim var arkadaşlar yardım eden olursa sevinirim... Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted April 28, 2013 Share Posted April 28, 2013 Hangi dilde yardım istiyorsunuz ? Quote Link to comment Share on other sites More sharing options...
mesale0077 Posted April 28, 2013 Share Posted April 28, 2013 bazı örnekler ve makaleler buldum c ile #include <stdio.h> int ricerca_fib(int a[], int n, long x) { int inf=0, pos, k; static int kk= -1, nn=-1, fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141}; if(nn!=n) { k=0; while(fib[k]<n) k++; kk=k; nn=n; } else k=kk; while(k>0) { pos=inf+fib[--k]; if((pos>=n)||(x<a[pos])); else if (x>a[pos]) { inf=pos+1; k--; } else { return pos; } } return -1; } autoit ile #include <array.au3> Dim $fib1 = 1, $fib2 = 2, $fib3, $results[51], $temp $results[1] = $fib1 $results[2] = $fib2 For $temp = 3 To 50 $fib3 = $fib1 + $fib2 $results[$temp] = $fib3 swap($fib1, $fib2, $fib3) Next _ArrayDisplay($results, "50 Fibonacci Numbers") Func swap(ByRef $a, ByRef $b, ByRef $c) $a = $b $b = $c EndFunc ;==>swap #include <stdio.h> /* Fibonacci Dizisi oluşturmak için kullanacağımız fonksiyonu yazıyoruz. Bu fonksiyon n. Fibonacci sayısına kadar olan diziyi ekrana yazdıracak. Bu fonksiyon geriye hiçbir değer döndürmeyeceği için void olarak tanımlıyoruz. */ void FibonacciDizisi(int diziUzunlugu) { int a,b,c,sayac; /*a'ya -1'i b'ye 1'i atıyoruz. Bunu neden yaptığımıza gelirsek fibonacci sayılarını bulabilmemiz için bu şekilde atamamız gerekiyor. Niye olduğunu fonksiyonumuz üzerinde bir örnekle açıklayalım. Mesela diziUzunlugu = 3 olsun. for döngüsü işlemeye başladı. sayac= 0 iken c= a+b yani (-1)+(1)=0 oluyor => c=0 c'yi ekrana yazdırdık. Şimdi a'yı b'ye, b'yi c'ye eşitledik eşledik. a=1 b=0 Yine c= a+b oldu c=1 c'yi ekrana yazdırdık. Yine a=b, b=c. a=0, b=1 c= a+b oldu c=1 c'yi ekrana yazdırdık c=1 İlk 3 sayıyı yazdırmış olduk. 0 1 1 */ a=-1; b=1; for(sayac=0;sayac<diziUzunlugu; sayac++) { c=a+b; printf("%d\n", c); a=b; b=c; } } /* Şimdi bize n. Fibonacci sayısını verecek olan fonksiyonu yazıyoruz. Bize n. Fibonacci sayısını geri döndüreceği için int olarak tanımlıyoruz. Yani x diye integer türünde bir değişkenimizin olduğunu varsayarsak: x = FibonacciSayisi(10); diyerek x'e 10.Fibonacci sayısını atayabiliriz. */ int FibonacciSayisi(int n) { /* Dikkat ederseniz ilk fonksiyonumuzdaki a,b, sayac değişkenini burada tekrar tanımlıyoruz. Çünkü ilk fonksiyondaki a,b ve sayac değişkenleri ilk fonksiyonun kapsama alanındaydı, yani ilk fonksiyonun lokal değişkenleriydi. Bir nevi { } yani kıvırcıklar değişkenlerin kapsama alanını da gösteriyor... */ int a,b,sayac; a=-1; b=1; /*Yine ilk fonksiyondaki gibi a=-1 b=1 diyoruz. Bu sefer döngünün içinde 2 değişken kullandık. 3 taneyle olandan farkı yok, maksat marjinallik... */ for(sayac=0;sayac<n;sayac++) { b += a; a = b-a; } return b; } // Sıra geldi ana fonksiyonumuza... int main() { int dizi,sayi,secim; /*Kullanıcıya 1 veya 2'yi girerek istenilen fonksiyonu seçmesini sağlıyoruz. */ printf("n elemanli Fibonacci Dizisi icin 1'i\n"); printf("n. Fibonacci Sayisi icin 2'yi tuslayiniz: "); scanf("%d", &secim); if(secim == 1) { printf("n degerini giriniz:"); scanf("%d",&dizi); FibonacciDizisi(dizi); } else if(secim == 2) { printf("n degerini giriniz:"); scanf("%d",&sayi); printf("%d\n", FibonacciSayisi(sayi)); } //Kullanıcı 1 veya 2 dışında birşey tuşlarsa, ona bunu yapmaması gerektiğini aşağıdaki else bloğuyla söylüyoruz. else { printf("\nbeyin.dll not found.\n"); printf("\nLutfen 1 -bir- veya 2 -iki-'yi tuslayin...\n"); } return 0; } makale http://snipplr.com/view/61924.76617/ http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fib.html http://rosettacode.org/wiki/Fibonacci_sequence http://www.arastirmax.com/bilimsel_yayin/istanbul-%C3%BCniversitesi-i%C5%9Fletme-fak%C3%BCltesi-dergisi/35/1/69-83_fibonacci-arama-y%C3%B6ntemi-kullanilarak-brownun-t-e-k https://en.wikipedia.org/wiki/Fibonacci_number Quote Link to comment Share on other sites More sharing options...
huso42 Posted April 28, 2013 Author Share Posted April 28, 2013 c++ da Hangi dilde yardım istiyorsunuz ? bazı örnekler ve makaleler buldum c ile #include <stdio.h> int ricerca_fib(int a[], int n, long x) { int inf=0, pos, k; static int kk= -1, nn=-1, fib[]={0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141}; if(nn!=n) { k=0; while(fib[k]<n) k++; kk=k; nn=n; } else k=kk; while(k>0) { pos=inf+fib[--k]; if((pos>=n)||(x<a[pos])); else if (x>a[pos]) { inf=pos+1; k--; } else { return pos; } } return -1; } autoit ile #include <array.au3> Dim $fib1 = 1, $fib2 = 2, $fib3, $results[51], $temp $results[1] = $fib1 $results[2] = $fib2 For $temp = 3 To 50 $fib3 = $fib1 + $fib2 $results[$temp] = $fib3 swap($fib1, $fib2, $fib3) Next _ArrayDisplay($results, "50 Fibonacci Numbers") Func swap(ByRef $a, ByRef $b, ByRef $c) $a = $b $b = $c EndFunc ;==>swap #include <stdio.h> /* Fibonacci Dizisi oluşturmak için kullanacağımız fonksiyonu yazıyoruz. Bu fonksiyon n. Fibonacci sayısına kadar olan diziyi ekrana yazdıracak. Bu fonksiyon geriye hiçbir değer döndürmeyeceği için void olarak tanımlıyoruz. */ void FibonacciDizisi(int diziUzunlugu) { int a,b,c,sayac; /*a'ya -1'i b'ye 1'i atıyoruz. Bunu neden yaptığımıza gelirsek fibonacci sayılarını bulabilmemiz için bu şekilde atamamız gerekiyor. Niye olduğunu fonksiyonumuz üzerinde bir örnekle açıklayalım. Mesela diziUzunlugu = 3 olsun. for döngüsü işlemeye başladı. sayac= 0 iken c= a+b yani (-1)+(1)=0 oluyor => c=0 c'yi ekrana yazdırdık. Şimdi a'yı b'ye, b'yi c'ye eşitledik eşledik. a=1 b=0 Yine c= a+b oldu c=1 c'yi ekrana yazdırdık. Yine a=b, b=c. a=0, b=1 c= a+b oldu c=1 c'yi ekrana yazdırdık c=1 İlk 3 sayıyı yazdırmış olduk. 0 1 1 */ a=-1; b=1; for(sayac=0;sayac<diziUzunlugu; sayac++) { c=a+b; printf("%d\n", c); a=b; b=c; } } /* Şimdi bize n. Fibonacci sayısını verecek olan fonksiyonu yazıyoruz. Bize n. Fibonacci sayısını geri döndüreceği için int olarak tanımlıyoruz. Yani x diye integer türünde bir değişkenimizin olduğunu varsayarsak: x = FibonacciSayisi(10); diyerek x'e 10.Fibonacci sayısını atayabiliriz. */ int FibonacciSayisi(int n) { /* Dikkat ederseniz ilk fonksiyonumuzdaki a,b, sayac değişkenini burada tekrar tanımlıyoruz. Çünkü ilk fonksiyondaki a,b ve sayac değişkenleri ilk fonksiyonun kapsama alanındaydı, yani ilk fonksiyonun lokal değişkenleriydi. Bir nevi { } yani kıvırcıklar değişkenlerin kapsama alanını da gösteriyor... */ int a,b,sayac; a=-1; b=1; /*Yine ilk fonksiyondaki gibi a=-1 b=1 diyoruz. Bu sefer döngünün içinde 2 değişken kullandık. 3 taneyle olandan farkı yok, maksat marjinallik... */ for(sayac=0;sayac<n;sayac++) { b += a; a = b-a; } return b; } // Sıra geldi ana fonksiyonumuza... int main() { int dizi,sayi,secim; /*Kullanıcıya 1 veya 2'yi girerek istenilen fonksiyonu seçmesini sağlıyoruz. */ printf("n elemanli Fibonacci Dizisi icin 1'i\n"); printf("n. Fibonacci Sayisi icin 2'yi tuslayiniz: "); scanf("%d", &secim); if(secim == 1) { printf("n degerini giriniz:"); scanf("%d",&dizi); FibonacciDizisi(dizi); } else if(secim == 2) { printf("n degerini giriniz:"); scanf("%d",&sayi); printf("%d\n", FibonacciSayisi(sayi)); } //Kullanıcı 1 veya 2 dışında birşey tuşlarsa, ona bunu yapmaması gerektiğini aşağıdaki else bloğuyla söylüyoruz. else { printf("\nbeyin.dll not found.\n"); printf("\nLutfen 1 -bir- veya 2 -iki-'yi tuslayin...\n"); } return 0; } makale http://snipplr.com/view/61924.76617/ http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fib.html http://rosettacode.org/wiki/Fibonacci_sequence http://www.arastirmax.com/bilimsel_yayin/istanbul-%C3%BCniversitesi-i%C5%9Fletme-fak%C3%BCltesi-dergisi/35/1/69-83_fibonacci-arama-y%C3%B6ntemi-kullanilarak-brownun-t-e-k https://en.wikipedia.org/wiki/Fibonacci_number teşekkürler Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted April 28, 2013 Share Posted April 28, 2013 (edited) Fibonacci güzel bir algoritmadır ve modellemesi kolaydır. Bunu bu kadar karmaşıklaştırmaya gerek yok bence Recursive(öz yinelemeli) fonksiyon ile göstermek daha doğru olacaktır böylece kodlar uzamaz ve kod ağacda kendini yineler. Autoit Recursive: Global $n = 1000 ConsoleWrite(_Fibonacci($n) & @CRLF) Func Recursive_Fib($f) If $f < 2 Then Return $f If $f > 1476 Then Return 0 Return Recursive_Fib_(1, 1, $f) EndFunc ;==>Recursive_Fib Func Recursive_Fib_($f1, $f2, $fn) If $fn < 3 Then Return $f2 Return Recursive_Fib_($f2, $f1 * 1.0 + $f2 * 1.0, $fn - 1) EndFunc ;==>Recursive_Fib_ Autoit Iterative : Func _Fibonacci($iIterations) Return (5 ^ - 0.5) * ((((1 + (5 ^ 0.5)) / 2) ^ $iIterations) - (((1 - (5 ^ 0.5)) / 2) ^ $iIterations)) EndFunc ;==>_Fibonacci C Recursive : int Recursive_Fib(int n) { if (n < 2) return n; else return Recursive_Fib(n-1) + Recursive_Fib(n-2); } printf("%d\n", Recursive_Fib(10)); C Iterative : int Recursive_Fib(int n) { int first = 0, second = 1; int tmp; while (n--) { tmp = first+second; first = second; second = tmp; } return first; } C# Recursive : using System; class Recursive_Fib { public static int rFibo(int n) { return (n < 2) ? 1 : rFibo(n-2) + rFibo(n-1); } public static int Main(String[] args) { int limit; int f; limit = System.Convert.ToInt32(args[0]); if(limit < 1) limit = 1; f = rFibo(limit); Console.WriteLine(f.ToString()+"\n"); return(0); } } C# Iterative : public class Fibonacci { public static void Main() { int oldnum = 1; int currnum = 1; int nextNumber; System.Console.Write(currnum + " "); while (currnum < 50) { System.Console.Write(currnum + " "); nextNumber = currnum + oldnum; oldnum = currnum; currnum = nextNumber; } } } Java Hem Recursive Hem Tekrarlı : import java.util.Date; public class Main { private static long[] fib; public static void main(String[] args) { Long t1; int maxi = Integer.parseInt(args[0]); // recursive t1 = new Date().getTime(); System.out.println("Recursive:"); System.out.println(rec(maxi)); System.out.println(new Date().getTime() - t1); // iterative System.out.println("Iterative:"); t1 = new Date().getTime(); System.out.println(ite(maxi)); System.out.println(new Date().getTime() - t1); } private static long rec(int n){ if(fib==null){ fib = new long[n+1]; for(int i = 0; i< n+1; i++) fib[i] = -1; } if(fib[n]==-1) if(n < 2) fib[n] = n; else fib[n] = rec(n-1) + rec(n-2); return fib[n]; } private static long ite(int n){ long[] ita = new long[n+1]; ita[0] = 0; ita[1] = 1; for(int i = 2; i < n+1; i++){ ita[i] = ita[i-1] + ita[i-2]; } return ita[n]; } } ve son olarak PHP Hem öz yinelemeli hem tekrarlı <?php function fibo($n) { return(($n Iterative function fibonacci($length) { for( $l = array(1,1), $i = 2, $x = 0; $i < $length; $i++ ) { $l[] = $l[$x++] + $l[$x]; } return $l; } for{ $x=0; $x< $fibmax; $x++) echo "fib(" , $x , ") ", fibonacci($x), "\n" ?> Edited April 28, 2013 by SimpsoN_Bart Quote Link to comment Share on other sites More sharing options...
huso42 Posted April 28, 2013 Author Share Posted April 28, 2013 Fibonacci güzel bir algoritmadır ve modellemesi kolaydır. Bunu bu kadar karmaşıklaştırmaya gerek yok bence Recursive(öz yinelemeli) fonksiyon ile göstermek daha doğru olacaktır böylece kodlar uzamaz ve kod ağacda kendini yineler. Autoit Recursive: Global $n = 1000 ConsoleWrite(Recursive_Fib($n) & @CRLF) Func Recursive_Fib($f) If $f < 2 Then Return $f If $f > 1476 Then Return 0 Return Recursive_Fib_(1, 1, $f) EndFunc ;==>Recursive_Fib Func Recursive_Fib_($f1, $f2, $fn) If $fn < 3 Then Return $f2 Return Recursive_Fib_($f2, $f1 * 1.0 + $f2 * 1.0, $fn - 1) EndFunc ;==>Recursive_Fib_ bilgin için teşekkürler..ben sadece bu konu hakkında sunum yapacam..bu konu ile bilgi verebilrsen sevinirmm Quote Link to comment Share on other sites More sharing options...
mesale0077 Posted April 28, 2013 Share Posted April 28, 2013 Func _Fibonacci($iIterations) Return (5 ^ -0.5) * ((((1 + (5 ^ 0.5)) / 2) ^ $iIterations) - (((1 - (5 ^ 0.5)) / 2) ^ $iIterations)) EndFunc Quote Link to comment Share on other sites More sharing options...
mesale0077 Posted April 28, 2013 Share Posted April 28, 2013 (edited) C++ Fibonacci #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) {int i; long dizi[100]; dizi[0]=1; dizi[1]=1; cout<<dizi[0]<<","<<dizi[1]; for(i=2;i<40;i++){ dizi[i]=dizi[i-1]+dizi[i-2]; cout<<","; cout<<dizi[i]; } system("PAUSE"); return EXIT_SUCCESS; } diğer örnek #include<iostream> using namespace std; unsigned long int fibonacci(int n){ if (n==0) return 0; if (n==1) return 1; return fibonacci(n-1)+fibonacci(n-2); } int main (){ int n; unsigned long int fibo; cout<<"kacinci fibonacci sayisini istiyorsunuz?"<<endl; cin>>n; fibo = fibonacci(n); cout<<"sonuc: "<<fibo<<endl; return 0; } diğer örnek C++ programming code #include<iostream> using namespace std; main() { int n, c, first = 0, second = 1, next; cout << "Enter the number of terms of Fibonacci series you want" << endl; cin >> n; cout << "First " << n << " terms of Fibonacci series are :- " << endl; for ( c = 0 ; c < n ; c++ ) { if ( c <= 1 ) next = c; else { next = first + second; first = second; second = next; } cout << next << endl; } return 0; } Edited April 28, 2013 by mesale0077 Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted April 28, 2013 Share Posted April 28, 2013 (edited) Fibonacci entropi kodlama bölümünde yer alan kolay ve anlaşılır bir algoritmadır.Sembollerin olasılıkları ile kod uzunlukları düzenliliği ile kod yazarken bu algoritma kullanılır.Kullanım alanı geniştir onun için biraz araştırma yapman gerekebilir matematiksel bir forumulü de var. Kendi arşvimden bir kaynak vereyim biraz da sen araştır.Geniş bir konudur sadece programlamada değil diğer alanlarlarda da kullanımı yaygındır.Bu yüzden modellemesi kolaydır. https://www.box.com/s/6a9j7qkg34xfx2r0gkw9 http://www.bilimarsivi.com/fibonacci-leonardo-fibonacci-ve-fibonacci-dizisi/ Edited April 28, 2013 by SimpsoN_Bart Quote Link to comment Share on other sites More sharing options...
mesale0077 Posted April 28, 2013 Share Posted April 28, 2013 bu güzelmiş “Adamın biri, dört bir yanı duvarla çevrili yere bir çift tavşan koymuş. Her çift tavşanın bir ay içinde yeni bir çift tavşan peydahladığı, her yeni çiftin de erginleşmesi için bir ay gerektiği ve tavşanların ölmediği var sayılırsa, 100 ay sonunda dört duvarın arasında kaç çift tavşan olur?” kaynak :http://www.bilimarsivi.com/fibonacci-leonardo-fibonacci-ve-fibonacci-dizisi/ Quote Link to comment Share on other sites More sharing options...
SimpsoN_Bart Posted April 28, 2013 Share Posted April 28, 2013 Evet üstte verdiğim site güzeldir geçen sene ihtiyacım olduğu için onu verdim öykü gibi anlatması hoş olmuş doğrusu :) Quote Link to comment Share on other sites More sharing options...
MostWanted Posted April 28, 2013 Share Posted April 28, 2013 Bu konu "AutoIT" forumundan "Yazılım" forumuna taşınmıştır. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.