raider Mesaj tarihi: Kasım 17, 2007 Paylaş Mesaj tarihi: Kasım 17, 2007 Hocamız bizden C dilinde 1000'e kadar bütün Fibonacci sayılarını hesaplatmamızı istiyor.fakat bunu lookup table,Linked list birde Structure kullanarak yapmamız gerek.Nasıl yapılacağı konusunda en ufak bir fikrim yok. Normal olarak 46. sayıya kadar hesaplatıyorum ama alakası yok tabi hocanın istediği ile.Nasıl yapacağım konusunda fikir verebilecek biri varmı? Yardım edebilecek arkadaşlar yardımını esirgemesin :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 17, 2007 Paylaş Mesaj tarihi: Kasım 17, 2007 linked list mi. arrayla yapılır yahu, list ya da array kullanmanın tek olayı, bir önceki fibonacci sayısını saklamak ve böylece atıyorum n. fibonacci sayısını en baştan hesaplamak zorunda kalmamak .insanlar tabi genelde bu işi hissi olarak öyle yapıyor, ama algoritmik olarak önemli bir nokta. Yani 45. fibonacci numarasını hesaplaraken 44. fibonacci numarasını bilmekle hiç bir fibonacci numarasını bilmemek arasında dağlar kadar fark var. neyse işin felsefesini bırakırsak, lookup table herhalde array oluyor, bu iş içinde array kullanmak mantıklı look up table'a gerek yok. array_fib[]; array_fib[0]=1; //bu üçü ön tanımlı rakamlar olmak zorunda array_fib[1]=1; fibonacci(number){ //hesabı yapıp değeri döndüren fonk. array_fib[number]= array_fib[number-1]+ array_fib[number-2]; return array_fib[number]; } for(n=2;n<1000;n++) //fib arrayine değerleri atayan iterasyon { array_fib[number]=fibonacci(number); } print array_fib; gibi basit geri dönümlü bir algoritma ile yapman mümkün (tabi bunu C'ye çevircen). gördüğün gibi burdaki kritik mantık, her adımda hesaplanan fibonacci rakamının bir arrayde saklanarak daha sonraki hesaplarda direk kullanılması. Yoksa 45. fibonacci rakamını hesaplarken, direk 43. ve 44. rakamı kayıtlı oldukları arrayden alıp toplamak yerine, başktan hesaplaman gerekecekti. Ki bunun 1000. fibonacci numarası için yapmak, daha önceki fibonacci rakamlarının kaydedilmediği bir algoritma ile, bir bilgisayar için bile çok zor (deneyip görülebilir), yapılacak işlem basit gözükse bile. Linked list gibi bir datayapısıne hiç gerek yok burda, sadece hesaplanan değerleri bir arrayde saklaman algoritmayı yeterince hızlı yapacaktır. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
asinanyavuz Mesaj tarihi: Kasım 18, 2007 Paylaş Mesaj tarihi: Kasım 18, 2007 Linked list'i de geçtik struct ne alaka? Ardeth kurulabilecek en güzel mantığı kurmuş bence. Bu mantığa ne Linked List gireeer ne de struct zaten. Ya da soruyu şöyle düzelteyim. Struct ne amaçla kullanılacak? Neler arasında bir mantıksal birliktelik var ki bir yapı oluşturulacak? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 18, 2007 Paylaş Mesaj tarihi: Kasım 18, 2007 Buarada ben burda geri dönüm değil iterasyon kullanmışım zaten (kafamı karıştırıyor bu recursion :p). Yukarda tabi arrayle ilgili sorunlar var onu gördüm (en azından c++da çalışmaz) çünkü fonksiyon içersindeki array fonksiyon bitince siliniyor eğer başka bir fonksiyona referans değilse. Kısacası arrayi fonksiyona sokarken referans kullanman lazım c++ ile yazıyorsan. Ama tabi ben perlle yazmaya alışık olduğum için arrayi global olarak tanımlaman yeterli. Lazımsa recursion olarak da yazarım. Hatta yazdım. Burda da mainde bir array oluşturmak yerine direk verdiğin rakamı hesaplayıp sana gönderiyor. Ama bu fonksiyon verilen tek bir fibonacci rakamının bulmak için uygun. 1den 1000e kadar hepsini hesapla dersen yine main içersinde bir arrayde saklaman lazım bulduğun değerleri, yoksa algoritmanın hesap süresi n^2 olur (yani istediğin fibonacci rakamının yaklaşık olarak karesiyle orantılı olarak artar gereken süre). fibonacci(number){ //hesabı yapıp değeri döndüren fonk. array_fib[]; array_fib[0]=1; //bu üçü ön tanımlı rakamlar olmak zorunda array_fib[1]=1; if(number!=0 AND number!=1) { array_fib[number]= fibonacci(number-1) + fibonacci(number-2); return array_fib[number]; } else return 1; } Main{ fibonacci1000=fibonacci(1000); print fibonacci1000; } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
raider Mesaj tarihi: Kasım 18, 2007 Konuyu açan Paylaş Mesaj tarihi: Kasım 18, 2007 Dediğiniz yöntemler ile bende yapabiliyorum fakat, O şekilde en fazla 46 ya kadar hesaplıyabiliyor bilgisayar.Direk soruyu yazayım benen iyisi :) ; "Your program should be able to calculate up to the 1000th fibonacci number. the large fibonacci numbers cannot be stored in an integer variable. so you have to desing an algorithm that can store these large numbers.you will use linked list data type for this problem. you should use a lookup table in order to store already calculated fibonacci numbers.for the lookup table you will use pointer array." Structure kullanılacak derken recursive olarak kullanılacak sanırım linked list yapmak için.kafamda işin mantığını oturta bilsem. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 18, 2007 Paylaş Mesaj tarihi: Kasım 18, 2007 recursion ve ve c ya da c++ gibi çin işkencesi bir dil kullanırsan evet. Fakat iterasyon ve perl gibi kolay ve basit bir dil kullanırsan (tamam belki c++ kadar kuvvetli ve c kadar hızlı olmasa bile); algoritma: #!/usr/bin/perl -w @fib=(); $fib[0]=1; $fib[1]=1; for($number=2;$number { $fib[$number]= $fib[$number-1]+ $fib[$number-2]; print $number."th number is".$fib[$number]."n"; } sonuç(2 saniye falan sürdü ya da sürmedi):http://img87.imageshack.us/img87/1614/sonuvx7.jpg Ha C için, muhtemelen long integer falan kullanman gerekiyor olabilir. O da yetmezse ya da şöyle yapabilirsin belki (bunu hiç denemedim sallıyorum şu an) sonucu resimdeki gibi string olarak saklarsın (bilmem kaç e199), kullanılması gerektiği zaman integer'a çevirirsin..Ama zaten perl bu tür şeyleri otomatikman yaptığı için uzun süredir hiç uğraşmam gerekmedi c++ ve c'nin nazıyla :p Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Volfied Mesaj tarihi: Kasım 24, 2007 Paylaş Mesaj tarihi: Kasım 24, 2007 Ardeth cim iyi guzel yazmissin da, C odeviyse bu probleme degil, implementasyon detaylarina dikkat edilmesi gerekiyor. Tabi ki yapilan cogu odevin cok daha basit ve sade bir yolu olacak. Ama hoca bilinen basit bir ornegi konuya uyarlamak istemis. Ha ben de anlamadim hem lookup table hem linked list ne alaka. Ama structure dedigin heralde C deki struct lar, ve bu iki data structure dan biirni yapmak istiyorsan struct kullanman pek mantikli. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
wildpervert Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 abi link list struct kullanmayın demişsiniz de ödevin konusu o nası kullanmasın :D yani arayle yapıyosan aynısını link listle de yapabilirsin. link list konusunda hiç bi fikrin yoksa, oturup öğrenmeni tavsiye ederim çok zor değildir. her yeni sayı için malloc ile yer açıp buna da struct taki node unu koyucaksın. structında bir number bide link diye iki kısım olcak, linkinde bir sonraki objen olucak. yani yeni yarattıkça bunun adresini bir öncekinin linkine yazıcaksın. böle böle aray mantığını bozmadan aynı algoritmayı kullanabilirsin. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Volfied Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 tabi kontrol etmen gereken sey dogru sirayla linked list e koyman, ki daha sonra bir sey bulmak istediginde sirayla gidiceksin, yaptikca ekliceksin. mesela 10. numarayi istiyorsun, 10. node da saklaniyo olacak o numara. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Baluu Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 128 bit olarak C# da bir arkadasim sagolsun c++ a cevirdi yardimci olur mu bilmem, buyur anam... C# class Fibonacci4 { static decimal golden_ratio = (1.0M + DecSqrt(5.0M)) / 2.0M; private static decimal DecSqrt(decimal x) { decimal y; y = (decimal)Math.Sqrt((double)x); y = (y + x / y) / 2.0M; y = (y + x / y) / 2.0M; return (y); } public static void Main() { decimal lo = 1M; decimal hi = 1M; decimal n = 1M; decimal ratio; Console.Write("{0,3:N0}", n); Console.Write("t"); Console.WriteLine("{0,39:N0}", lo); try { while (hi > 0M) { n++; Console.Write("{0,3:N0}", n); Console.Write("t"); Console.Write("{0,39:N0}", hi); Console.Write("t"); ratio = hi / lo; Console.Write("{0,37:F30}", ratio); Console.Write("t"); Console.WriteLine("{0,37:F30}", ratio - golden_ratio); hi = lo + hi; lo = hi - lo; } } catch (System.OverflowException) { } } } C++ #include <stdio.h> #include <stdlib.h> #include <math.h> #if defined(__sun) #include <sunmath.h> #endif long long fib_internal(long long n, long long i, long long previous, long long present) { return (i == n) ? present : fib_internal(n, i + 1, present, previous + present); } long long fib(long long n) { return fib_internal(n, 1, 0, 1); } int main(void) { long long fn = 1LL; long long fnm1 = 1LL; long long n = 1LL; long double ratio; long double golden_ratio = (1.0 + sqrtl(5.0))/2.0; (void)printf("%2lldt%19lldn", n, fnm1); for (;;) { n++; fnm1 = fn; fn = fib(n); if (fn < 0LL) break; ratio = (long double)fn/(long double)fnm1; (void)printf("%2lldt%19lldt%37.33Lft%37.33Lfn", n, fn, ratio, (ratio - golden_ratio)); } return (EXIT_SUCCESS); } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Baluu Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 C# Output : 1 1 2 1 1.000000000000000000000000000000 -0.618033988749894848204586834400 3 2 2.000000000000000000000000000000 0.381966011250105151795413165600 4 3 1.500000000000000000000000000000 -0.118033988749894848204586834400 5 5 1.666666666666666666666666666700 0.048632677916771818462079832300 6 8 1.600000000000000000000000000000 -0.018033988749894848204586834400 7 13 1.625000000000000000000000000000 0.006966011250105151795413165600 8 21 1.615384615384615384615384615400 -0.002649373365279463589202219000 9 34 1.619047619047619047619047619000 0.001013630297724199414460784600 10 55 1.617647058823529411764705882400 -0.000386929926365436439880952000 11 89 1.618181818181818181818181818200 0.000147829431923333613594983800 12 144 1.617977528089887640449438202200 -0.000056460660007207755148632200 13 233 1.618055555555555555555555555600 0.000021566805660707350968721200 14 377 1.618025751072961373390557939900 -0.000008237676933474814028894500 15 610 1.618037135278514588859416445600 0.000003146528619740654829611200 16 987 1.618032786885245901639344262300 -0.000001201864648946565242572100 17 1,597 1.618034447821681864235055724400 0.000000459071787016030468890000 18 2,584 1.618033813400125234815278647500 -0.000000175349769613389308186900 19 4,181 1.618034055727554179566563467500 0.000000066977659331361976633100 20 6,765 1.618033963166706529538387945500 -0.000000025583188318666198888900 21 10,946 1.618033998521803399852180340000 0.000000009771908551647593505600 22 17,711 1.618033985017357938973140873400 -0.000000003732536909231445961000 23 28,657 1.618033990175597086556377392600 0.000000001425702238351790558200 24 46,368 1.618033988205325051470844819800 -0.000000000544569796733742014600 25 75,025 1.618033988957902001380262249800 0.000000000208007153175675415400 26 121,393 1.618033988670443185604798400500 -0.000000000079451662599788433900 27 196,418 1.618033988780242682856507376900 0.000000000030347834651920542500 28 317,811 1.618033988738303006852732438000 -0.000000000011591841351854396400 29 514,229 1.618033988754322537608830405500 0.000000000004427689404243571100 30 832,040 1.618033988748203621343798191100 -0.000000000001691226860788643300 31 1,346,269 1.618033988750540839382721984500 0.000000000000645991178135150100 32 2,178,309 1.618033988749648101530971893400 -0.000000000000246746673614941000 33 3,524,578 1.618033988749989097047296779300 0.000000000000094248842709944900 34 5,702,887 1.618033988749858848350071980200 -0.000000000000035999854514854200 35 9,227,465 1.618033988749908598925421457600 0.000000000000013750720834623200 36 14,930,352 1.618033988749889595896597819700 -0.000000000000005252307989014700 37 24,157,817 1.618033988749896854407719255400 0.000000000000002006203132421000 38 39,088,169 1.618033988749894081903178586000 -0.000000000000000766301408248400 39 63,245,986 1.618033988749895140905679158300 0.000000000000000292701092323900 40 102,334,155 1.618033988749894736402718110800 -0.000000000000000111801868723600 41 165,580,141 1.618033988749894890909100681000 0.000000000000000042704513846600 42 267,914,296 1.618033988749894831892914018000 -0.000000000000000016311672816400 43 433,494,437 1.618033988749894854435091436900 0.000000000000000006230504602500 44 701,408,733 1.618033988749894845824745843300 -0.000000000000000002379840991100 45 1,134,903,170 1.618033988749894849113605205100 0.000000000000000000909018370700 46 1,836,311,903 1.618033988749894847857372713100 -0.000000000000000000347214121300 47 2,971,215,073 1.618033988749894848337210827300 0.000000000000000000132623992900 48 4,807,526,976 1.618033988749894848153928976800 -0.000000000000000000050657857600 49 7,778,742,049 1.618033988749894848223936414200 0.000000000000000000019349579800 50 12,586,269,025 1.618033988749894848197195952600 -0.000000000000000000007390881800 51 20,365,011,074 1.618033988749894848207409900000 0.000000000000000000002823065600 52 32,951,280,099 1.618033988749894848203508519200 -0.000000000000000000001078315200 53 53,316,291,173 1.618033988749894848204998714100 0.000000000000000000000411879700 54 86,267,571,272 1.618033988749894848204429510300 -0.000000000000000000000157324100 55 139,583,862,445 1.618033988749894848204646926800 0.000000000000000000000060092400 56 225,851,433,717 1.618033988749894848204563881100 -0.000000000000000000000022953300 57 365,435,296,162 1.618033988749894848204595601700 0.000000000000000000000008767300 58 591,286,729,879 1.618033988749894848204583485500 -0.000000000000000000000003348900 59 956,722,026,041 1.618033988749894848204588113500 0.000000000000000000000001279100 60 1,548,008,755,920 1.618033988749894848204586345800 -0.000000000000000000000000488600 61 2,504,730,781,961 1.618033988749894848204587021000 0.000000000000000000000000186600 62 4,052,739,537,881 1.618033988749894848204586763100 -0.000000000000000000000000071300 63 6,557,470,319,842 1.618033988749894848204586861600 0.000000000000000000000000027200 64 10,610,209,857,723 1.618033988749894848204586824000 -0.000000000000000000000000010400 65 17,167,680,177,565 1.618033988749894848204586838300 0.000000000000000000000000003900 66 27,777,890,035,288 1.618033988749894848204586832800 -0.000000000000000000000000001600 67 44,945,570,212,853 1.618033988749894848204586834900 0.000000000000000000000000000500 68 72,723,460,248,141 1.618033988749894848204586834100 -0.000000000000000000000000000300 69 117,669,030,460,994 1.618033988749894848204586834500 0.000000000000000000000000000100 70 190,392,490,709,135 1.618033988749894848204586834300 -0.000000000000000000000000000100 71 308,061,521,170,129 1.618033988749894848204586834400 0.000000000000000000000000000000 72 498,454,011,879,264 1.618033988749894848204586834400 0.000000000000000000000000000000 73 806,515,533,049,393 1.618033988749894848204586834400 0.000000000000000000000000000000 74 1,304,969,544,928,657 1.618033988749894848204586834400 0.000000000000000000000000000000 75 2,111,485,077,978,050 1.618033988749894848204586834400 0.000000000000000000000000000000 76 3,416,454,622,906,707 1.618033988749894848204586834400 0.000000000000000000000000000000 77 5,527,939,700,884,757 1.618033988749894848204586834400 0.000000000000000000000000000000 78 8,944,394,323,791,464 1.618033988749894848204586834400 0.000000000000000000000000000000 79 14,472,334,024,676,221 1.618033988749894848204586834400 0.000000000000000000000000000000 80 23,416,728,348,467,685 1.618033988749894848204586834400 0.000000000000000000000000000000 81 37,889,062,373,143,906 1.618033988749894848204586834400 0.000000000000000000000000000000 82 61,305,790,721,611,591 1.618033988749894848204586834400 0.000000000000000000000000000000 83 99,194,853,094,755,497 1.618033988749894848204586834400 0.000000000000000000000000000000 84 160,500,643,816,367,088 1.618033988749894848204586834400 0.000000000000000000000000000000 85 259,695,496,911,122,585 1.618033988749894848204586834400 0.000000000000000000000000000000 86 420,196,140,727,489,673 1.618033988749894848204586834400 0.000000000000000000000000000000 87 679,891,637,638,612,258 1.618033988749894848204586834400 0.000000000000000000000000000000 88 1,100,087,778,366,101,931 1.618033988749894848204586834400 0.000000000000000000000000000000 89 1,779,979,416,004,714,189 1.618033988749894848204586834400 0.000000000000000000000000000000 90 2,880,067,194,370,816,120 1.618033988749894848204586834400 0.000000000000000000000000000000 91 4,660,046,610,375,530,309 1.618033988749894848204586834400 0.000000000000000000000000000000 92 7,540,113,804,746,346,429 1.618033988749894848204586834400 0.000000000000000000000000000000 93 12,200,160,415,121,876,738 1.618033988749894848204586834400 0.000000000000000000000000000000 94 19,740,274,219,868,223,167 1.618033988749894848204586834400 0.000000000000000000000000000000 95 31,940,434,634,990,099,905 1.618033988749894848204586834400 0.000000000000000000000000000000 96 51,680,708,854,858,323,072 1.618033988749894848204586834400 0.000000000000000000000000000000 97 83,621,143,489,848,422,977 1.618033988749894848204586834400 0.000000000000000000000000000000 98 135,301,852,344,706,746,049 1.618033988749894848204586834400 0.000000000000000000000000000000 99 218,922,995,834,555,169,026 1.618033988749894848204586834400 0.000000000000000000000000000000 100 354,224,848,179,261,915,075 1.618033988749894848204586834400 0.000000000000000000000000000000 101 573,147,844,013,817,084,101 1.618033988749894848204586834400 0.000000000000000000000000000000 102 927,372,692,193,078,999,176 1.618033988749894848204586834400 0.000000000000000000000000000000 103 1,500,520,536,206,896,083,277 1.618033988749894848204586834400 0.000000000000000000000000000000 104 2,427,893,228,399,975,082,453 1.618033988749894848204586834400 0.000000000000000000000000000000 105 3,928,413,764,606,871,165,730 1.618033988749894848204586834400 0.000000000000000000000000000000 106 6,356,306,993,006,846,248,183 1.618033988749894848204586834400 0.000000000000000000000000000000 107 10,284,720,757,613,717,413,913 1.618033988749894848204586834400 0.000000000000000000000000000000 108 16,641,027,750,620,563,662,096 1.618033988749894848204586834400 0.000000000000000000000000000000 109 26,925,748,508,234,281,076,009 1.618033988749894848204586834400 0.000000000000000000000000000000 110 43,566,776,258,854,844,738,105 1.618033988749894848204586834400 0.000000000000000000000000000000 111 70,492,524,767,089,125,814,114 1.618033988749894848204586834400 0.000000000000000000000000000000 112 114,059,301,025,943,970,552,219 1.618033988749894848204586834400 0.000000000000000000000000000000 113 184,551,825,793,033,096,366,333 1.618033988749894848204586834400 0.000000000000000000000000000000 114 298,611,126,818,977,066,918,552 1.618033988749894848204586834400 0.000000000000000000000000000000 115 483,162,952,612,010,163,284,885 1.618033988749894848204586834400 0.000000000000000000000000000000 116 781,774,079,430,987,230,203,437 1.618033988749894848204586834400 0.000000000000000000000000000000 117 1,264,937,032,042,997,393,488,322 1.618033988749894848204586834400 0.000000000000000000000000000000 118 2,046,711,111,473,984,623,691,759 1.618033988749894848204586834400 0.000000000000000000000000000000 119 3,311,648,143,516,982,017,180,081 1.618033988749894848204586834400 0.000000000000000000000000000000 120 5,358,359,254,990,966,640,871,840 1.618033988749894848204586834400 0.000000000000000000000000000000 121 8,670,007,398,507,948,658,051,921 1.618033988749894848204586834400 0.000000000000000000000000000000 122 14,028,366,653,498,915,298,923,761 1.618033988749894848204586834400 0.000000000000000000000000000000 123 22,698,374,052,006,863,956,975,682 1.618033988749894848204586834400 0.000000000000000000000000000000 124 36,726,740,705,505,779,255,899,443 1.618033988749894848204586834400 0.000000000000000000000000000000 125 59,425,114,757,512,643,212,875,125 1.618033988749894848204586834400 0.000000000000000000000000000000 126 96,151,855,463,018,422,468,774,568 1.618033988749894848204586834400 0.000000000000000000000000000000 127 155,576,970,220,531,065,681,649,693 1.618033988749894848204586834400 0.000000000000000000000000000000 128 251,728,825,683,549,488,150,424,261 1.618033988749894848204586834400 0.000000000000000000000000000000 129 407,305,795,904,080,553,832,073,954 1.618033988749894848204586834400 0.000000000000000000000000000000 130 659,034,621,587,630,041,982,498,215 1.618033988749894848204586834400 0.000000000000000000000000000000 131 1,066,340,417,491,710,595,814,572,169 1.618033988749894848204586834400 0.000000000000000000000000000000 132 1,725,375,039,079,340,637,797,070,384 1.618033988749894848204586834400 0.000000000000000000000000000000 133 2,791,715,456,571,051,233,611,642,553 1.618033988749894848204586834400 0.000000000000000000000000000000 134 4,517,090,495,650,391,871,408,712,937 1.618033988749894848204586834400 0.000000000000000000000000000000 135 7,308,805,952,221,443,105,020,355,490 1.618033988749894848204586834400 0.000000000000000000000000000000 136 11,825,896,447,871,834,976,429,068,427 1.618033988749894848204586834400 0.000000000000000000000000000000 137 19,134,702,400,093,278,081,449,423,917 1.618033988749894848204586834400 0.000000000000000000000000000000 138 30,960,598,847,965,113,057,878,492,344 1.618033988749894848204586834400 0.000000000000000000000000000000 139 50,095,301,248,058,391,139,327,916,261 1.618033988749894848204586834400 0.000000000000000000000000000000 Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 sdf golden ratio kullanmış... 139da kalmış bi de o arkadaş 1000 istiyor dolayısıyla sayıları string gibi (53 e100 )falan saklamak lazım herhalde zira integer olarak saklamak mümkün değil. Ya da perlde 4 satır kod yazcan işte yukardaki gibi hehe Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 ya da bak şey yap: 1den 200e kadar bi table yap misal 1.232425252 sayısını 150. columna koyduğun zaman o 1.232425252 x 10^150 olsun böylece sanırım sorun olmadan saklayabilirsin. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 25, 2007 Paylaş Mesaj tarihi: Kasım 25, 2007 tabi table'ın diğer indeksi de kaçıncı sayı olduğu olacak. Misal 103. fibonacci sayısı atıyorum 1.456563 x 10^13 ise Bunu 103. row'a 13'a columna sadece 1.456563 olarak koyacaksın ve 13. sayıyı okuman gerektiği zaman ordan 1.456563 olarak alıp daha sonra 10^103 ile çarparak kullanacaksın. Şuan sadece c++ın o kadar büyük bir integerı depolama sorununa odaklanmış olarak bunu söylüyorum tabi linked listi'de her zaman bir array yerine kullanabilirsin. Volfiedin dediği gibi bir implementasyon sorusu ise aslında nasıl kullandığından ziyade doğru kullanıp kullanmadığın daha önemli olabilir. Ama yine de ben böyle sorulara karşıyım, sırf implementasyon koyacağım diye mantığıa aykırı gereksiz sorulara yani :p linked listin vs kullanılabileceği çok daha güzel sorular üretmek mümkün. ha birde tekrarlıyorum doğru bir recursion yapısı kullanmazsan muhtemelen bilgisayarının kapasitesi yetmeyecektir hesabı yapmaya (depolmaktan değil hesabı yapmaktan bahsediyorum zira dediğim gibi n^2 seviyesinde bir hesap olacaktır). İterasyon kullanman daha kolay olur ama tabi her iterasyon tıpa tıp aynı şeyi yapan bir recursiona da çevrilebilir illa lazımsa. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Baluu Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 50,095,301,248,058,391,139,327,916,261 139'da kalir tabi, 128 bit. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 Arkadaş da onu diyor zaten, hoca öyle bir yöntem bulun ki 1000. fibonacci sayısına kadar hesaplayın ve hafızada tutabilin. Ve yine yukarda anlattığım gibi perl o kadar büyük sayıları 1.23454 e100 gibi bir formatta saklayabiliyor. Aynı mantığı c++da 2 dimensional bir arrayle implement etmek de mümkün. Sorunun senden beklediği ve çözmeni istediği problem 130dan sonra başlıyor zaten. Bir de senin kullandığın yöntem çok yakın bir approximation altın oranı kullanan ama 4-5 satırlık kodla gerçek fibonacci sayısını bulman mümkün zaten o kadar yazmaya gerek yok bence. Sadece geride kalan sayıları bir arrayde saklamayı unutmamak lazım yoksa çok uzun sürer. Belki altın oran bilmem kaç milyonuncu fibonacci sayısını bulmak için daha mantıklı ama 1000. fibonacci için normal algoritmayı kurman yeterli. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Baluu Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 hmm aklima maple da kullandigimiz tailrecurse geldi :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Volfied Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 soyle bir sey yapabilirsin lookup table da her entry bir linked list node una pointer her linked list ayri bir sayiyi temsil edecek. Integer saklayabilirsin bundan sonra, ne de olsa biliyoruz ki her Fibonacci sayisi bir integer. sayinin ne kadar buyuk oldugu farketmez, ilk integer (node) sayinin max unsigned int (32 bit de sanirsam 2^32 ye denk geliyordu bu) modulo her ne ise, ondan sonraki 32 bit right shift edip tekrar ayni sey tekrar ayni sey, taki shift edilecek bit kalmayana kadar yani 0xFFFFFFFF bir integer in alabilecegi max deger ise, her node un 0xFFFFFFFF in powerlarina gore temsil eder. Daha sonra bunu decimal a dokmek istediginde de convert edersin geri. Veyahut rahat rahat gosterebilmek istiyorsan, her 1 milyon unu string olarak saklarsin, daha sonra toplama cikartma yaparken de iki node u toplarsin, arta kalani bir sonraki node a verirsin. Boylece lookup table ve linked list le baya buyuk sayilari store edebilecegin cok anlamsiz bir data structure un olmus olur :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
pwnbot Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 fibonacci mafya degil miydi ya? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Volfied Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 Math de anlatmadilar mi size pwnbot cum :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
pwnbot Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 valla daha cok sanat tarihiyle prison break 1. sezon arasi bir cagrisim yaptirdi bende. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Volfied Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 Biraz daha dusundum daha da mantikli geldi. Her node da 1 milyar max tutarsin (32 bit sonuc olarak 4 milyar a yuvarlanabilir) daha sonra toplarken iki node un maximum toplamindan artakalabilecek tke sey 1 olur bir sonraki node a, bunu da bir flag ile rahatca halledebilirsin cok guzel recursive function da yazilir hatta, hocaya da gosterirsin bakin hem lookup table (node pointerlar ilen) hem de linked list ile guzel bi sekild buyuk sayilari saklayabiliyorum. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Ardeth Mesaj tarihi: Kasım 26, 2007 Paylaş Mesaj tarihi: Kasım 26, 2007 Volfied said: Boylece lookup table ve linked list le baya buyuk sayilari store edebilecegin cok anlamsiz bir data structure un olmus olur :) hehe Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar