Dyskusja:Ciąg Fibonacciego
Z Wikipedii
Mam wątpliwości odnośnie tytułu artykułu. Czy to nie powinien być "Ciąg Fibonacciego", ewentualnie "liczby Fibonacciego" ? Te nazwy o ile wiem jest częściej spotykana, poza tym "funkcja o dziedzinie naturalnej" to z definicji ciąg.
Na stronie wikipedii niemieckiej na przykład definiują to właśnie jako ciąg.
Olaf 00:22, 24 wrz 2003 (CEST)
Tak to już jest w matematyce że na wszystko można spojrzeć z wielu punktów widzenia. Ja tu opisałem ten najbardziej naturalny z punktu widzenia informatycznego - fib(n) to bardzo popularna hello-worldowa funkcja. Taw 05:23, 24 wrz 2003 (CEST)
No tak, ale na tej zasadzie to każdy ciąg w informatyce jest funkcją, każda średnia jest funkcją, każde przekształcenie jest funkcją, a jednak mamy hasła ciąg monotoniczny, średnia arytmetyczna, przekształcenie liniowe. A Fibonacci to jednak był matematyk... Jednak, pozwólcie, zmienię na ciąg Fibonacciego. Olaf 21:11, 29 wrz 2003 (CEST)
kto jest za przyspieszeniem/skróceniem funkcji fibonacci uzytej w artykule na:
long fibonacci( long n ){ if ( n <= 1 ) return n; else return ( fibonacci( n - 1 ) + fibonacci( n - 2 ) ); }
albo jescze :> :
long fibonacci( long n ) { return ( n <= 1 ) ? n : ( fibonacci( n - 1 ) + fibonacci( n - 2 ) ); }
--zolv 21:47, 29 maj 2005 (CEST)
Zastanawiam się, czy przypadkiem nie wkradł sie tutaj błąd? Według mnie n-ty wyraz definiuje sie jako {[1+sqrt(5)]/2}^(n-1) - {[1+sqrt(5)]/2}^(n-1)
- A czy to nie będzie zawze równe 0? ;) --zolv 15:27, 22 wrz 2005 (CEST)
Algorytm w tym artykule jest calkowicie bledny. Uzywana jest zmienna m bez zadeklarowania. Jaka jest jej wartosc podczas pierwszego uzycia? --forneus
[edytuj] czy potrzebne nam C?
Jestem za tym, żeby tępić z wikipedii implementacje w konkretnych językach programowania, w artykułach dla których wybór języka nie ma większego znaczenia. W szczególności wolałbym zobaczyć tutaj pseudokod, zamiast C. Wazow 18:27, 7 kwi 2006 (CEST)
- Najlepiej w ogóle byłoby przyjąć jakiś język za de facto standard zapisu algorytmów dla całej Wiki. I to chyba faktycznie nie powinien być C. :) Jest jakiś ładnie opisany, ujednolicony pseudokod, którego możnaby użyć? (Coś w stylu tego linku z angielskiej wiki...) Squeal 19:12, 7 kwi 2006 (CEST)
- Jestem za. Pseudokod o wiele bardziej uniwersalnie przedstawia algorytm, pomijając techniczne kwestie często zależne od języka. Czy pseudokod zbliżony do Pascala (if...then, while...do, przypisanie ":=" itd.) nie jest czasem ogólnie przyjętym standardem pseudokodu? Przynajmniej ja się z takim spotykam najczęściej i wydaje mi się, że jest dość łatwy i przejrzysty. Ewentualnie możemy przedyskutować spolszczenie instrukcji. --A. ✉ 23:00, 7 kwi 2006 (CEST)
- Myślę, że nie ma sensu tworzenie nowego standardu pseudokodu, ze względu na to, że raczej nie ma szans stworzenia go tak ogólnym, by nadawał się do czytelnego opisu większości algorytmów. Algorytmy numeryczne lub graficzne są dużo bardziej zrozumiałe przy użyciu tradycyjnego języka matematycznego i opisów w języku polskim (proszę zauważyć, że ładnie opisany w artykule efektywny algorytm liczenia wyrazów ciągu Fibonacciego byłby dużo bardziej nieczytelny, gdybyśmy zaczęli go pseudo-implementować). Wikipedia nie jest "brykiem" dla programistów, i szanujący się programista powinien być zdolny zaimplementować tak opisane algorytmy. Uważam, że sens stosowania pseudokodu (raczej bazującego na opisach) pojawia się w przypadku naprawdę prostych algorytmów. Jeśli chodzi o umieszczone w artykule implementacje, jestem za jak najszybszym usunięciem ich z artykułu. Wprowadzają czytelnika w błąd, sugerując efektywność ostatniego z nich. Scythian 01:00, 8 kwi 2006 (CEST)
- Jestem za. Pseudokod o wiele bardziej uniwersalnie przedstawia algorytm, pomijając techniczne kwestie często zależne od języka. Czy pseudokod zbliżony do Pascala (if...then, while...do, przypisanie ":=" itd.) nie jest czasem ogólnie przyjętym standardem pseudokodu? Przynajmniej ja się z takim spotykam najczęściej i wydaje mi się, że jest dość łatwy i przejrzysty. Ewentualnie możemy przedyskutować spolszczenie instrukcji. --A. ✉ 23:00, 7 kwi 2006 (CEST)
Pseudokod algorytmu nigdy nie powinien tłumaczyć braku opisu. Opis i przykłady są podstawą i warunkiem koniecznym. Pseudokod jest dodatkiem. Jednak pseudokod często jest bardziej precyzyjny niż opis i dlatego jestem zwolennikiem zamieszczania pseudokodów o ile to ma sens (np. podawanie pseudokodu dla rekruencyjnego trywialnego algorytmu obliczania liczb Fibonacciego nie ma moim zdaniem sensu, gdyż byłoby to powtarzanie matematycznej definicji; pseudokod algorytmu liniowego ma już moim zdaniem sens, bo jest inny, a jego opis stanie się zbyt mętny, jeśli będziey chcieli osiągnąć super precyzję). Wazow 13:52, 8 kwi 2006 (CEST)
Nie wiem, czy powinniśmy silić się na jeden wspólny pseudokod dla całej polskiej wiki, być może przez nas wymyślony (choć jeśli musiałby już jakiś być, to dla mnie zawsze pierwszym wyborem jest ten ze wstępu do algorytmów Cormen et al). Zdecydowanie pseudokod nie powinien być zdefiniowany zbyt restrykcyjnie. Zawsze powinna być możliwość dodawania całych zdań w języku naturalnym, oraz używania operacji, których standard akurat zapomniał zdefiniować, a nam są potrzebne (operacje na zbiorach, czy cokolwiek takiego). Całym sercem jestem jednak za oderwaniem algorytmów od konkretnych implementacji. Wazow 13:52, 8 kwi 2006 (CEST)
- Nie wiem, IMHO z samej definicji pseudokodu wynika, że nie jest on zdefiniowany restrykcyjnie (w przypadku ścisłej definicji otrzymalibyśmy po prostu język programowania). :) Generalnie - sugeruję po prostu ustalić format paru podstawowych instrukcji (if, pętle, MOŻE wywołania podprocedur/funckji, MOŻE operacje arytmetyczne...). Nie powinno być z tym ani wiele kłopotu, ani wiele roboty. A reszta mogłaby, a nawet powinna, być opisana zdaniami w języku naturalnym.
- Raz - będzie to ułatwienie dla odwiedzających, bo nie będą musieli dla każdego zamieszczanego kodu od nowa odgadywać składni, w jakiej jest zapisany (A możemy chyba założyć, że kod w wikipedii jest przeznaczony w dużym stopniu dla osób, które nie miały większej styczności z daną dziedziną - być może z programowaniem w ogóle.). Dwa - ułatwienie dla piszących, skoro chcemy (Bo widzę, że w tej chwili wszyscy chcą.) zrezygnować z przykładów w konkretnych językach programowania (oczywiście poza artykułami dotyczącymi tychże języków!) - będzie z góry wiadomo, czego użyć w zamian. Squeal 17:40, 8 kwi 2006 (CEST)
A mi się pomysł pseudokodu zamiast języka programowania nie podoba. Dla odwiedzających to będzie utrudnienie, bo zamiast ścisłej definicji algorytmu otrzymają nieścisły pseudokod (gdyby zapis był ścisły, to otrzymalibyśmy język programowania, jak napisał mój poprzednik). Wolałbym zobaczyć tutaj C (które jest w końcu podstawą kilku innych języków), niż pseudokod. Olaf 19:02, 8 kwi 2006 (CEST)
- Generalnie w literaturze dot. algorytmów i struktur danych raczej używa się pseudokodu ze słowami kluczowymi języka Pascal, zwróć uwagę na anglojęzyczną wersję tego hasła. Vindur 20:59, 8 kwi 2006 (CEST)
- Stosowanie konkretnego języka (a zwłaszcza C) prowadzi do zaciemnienia istoty algorytmu nieistotnymi szczegółami (porównaj obecną wersję obliczania liczb fibonacciego, z programem w C, który usunąłem). Może Ci łatwiej czytać C niż pseudokod, ale dlatego że znasz C. Składnia pseudokodu jest zrozumiała dla wszystkich, którzy znają jakikolwiek język programowania. Dobrze napisany pseudokod musi być precyzyjny. Nie używa się pseudokodu po to by stracić precyzję, ale po to by podnieść poziom abstrakcji. Żebym mógł napisać że , zamiast całego algorytmu który to oblicza. Wazow 21:23, 8 kwi 2006 (CEST)
Zapis w pseudokodzie jest nieścisły. Przykładowo w pseudokodzie który jest w tej chwili w artykule niejasne są:
- Czy pętla "for" się wykona, jeśli n=1 ?
- Gdzie się kończy pętla "for" ? Rozumiem, że mówią o tym wcięcia jak w Pythonie, tylko po co w takim razie "do", które nie posiada "end" ? Poza tym stosowanie wcięć jako jedynego wyznacznika bloku kodu jest rzadką praktyką jeśli chodzi o języki. No chyba, że po prostu brakuje "end".
Oczywiście można te problemy ominąć, ale wymaga to ścisłego zdefiniowania pseudokodu, czyli stworzenia nowego języka programowania, którego nikt poza wikipedią by nie znał.
Natomiast zgadzam się, że poprzedni program w C był niezbyt elegancki. Można o wiele czytelniej (to właściwie C++, ale mała różnica):
int fibonacci(int n) { if (n==0) return 0; int f=1; int poprzednia=0; for (int i=2;i<=n;i++) { int suma=poprzednia+f; poprzednia=f; f=suma; }; return f; }
Nie wiem, czy to o wiele mniej czytelne od tamtego pseudokodu, ale przynajmniej ścisłe.
Dyskusja jest trochę akademicka, bo i tak mało kto czyta zalecenia edycyjne, więc cokolwiek nie ustalimy, artykuły będą powstawać jak dotychczas. I co wtedy ? Będziecie pracowicie przerabiali każdy algorytm na pseudokod, czy usuwali programy niezgodne ze wzorcem i ganili autorów ? Być może jestem w mniejszości, ale wydaje mi się, że wikipedia ma zaleceń edycyjnych stanowczo za dużo, a jej główną ideą jest wolność tworzenia. Jeśli ktoś chce tu wrzucić kod, to chyba lepiej, żeby to zrobił w jakimś języku, który akurat zna (choćby w Gythonie, czy innym C--), niż nie wrzucał w ogóle. Olaf 18:24, 9 kwi 2006 (CEST)
- Argument z n=1 jest chyba bardziej argumentem za zrezygnowaniem z pętli for w przykładach (może za wyjątkiem konstrukcji "for x in set"). No bo dla mnie na przykład podany przez ciebie kod jest równie niezrozumiały, bo akurat nie pamiętam, jak działa for w C. ;) I generalnie chyba właśnie takich problemów próbujemy uniknąć. Z drugiej strony - jak już przerzucamy się przykładami - pseudokod da się również ujednoznacznić (łatwiej niż program w C!), np. pisząc: .
- Jako najbardziej vocal proponent ustandardyzowanego pseudokodu zwracam też uwagę, że mówiłem od początku o standardzie de facto, nie de jure. (Myślę, że ze stopniowym konwertowaniem kodu nie byłoby kłopotu.) Zaś uściślenie składni, tak jak je widzę, miałoby się ograniczać tylko do kilku instrukcji sterujących (np. właśnie for), więc o pełnoprawnym języku programowania nie ma mowy. Squeal 19:34, 9 kwi 2006 (CEST)
Nie ma sprawy, jeśli chcecie, to przerabiajcie wszystko na pseudokod, macie do tego takie samo prawo, jak do każdej innej zmiany na wiki. Tylko, gdybym mógł prosić, nie nakazujcie każdemu wikipedyście najpierw uczyć się dodatkowo nowych zasad pisania na wikipedii pseudokodu, bo to może zabić kreatywność i zniechęcić ludzi. Fakt, że dobrze napisany pseudokod byłby i czytelniejszy i ścisły, tylko że na przykład ten w artykule jest tylko czytelniejszy w mojej opinii (z powodów, które wyżej podałem). Pozdrawiam, Olaf 20:09, 9 kwi 2006 (CEST)
W przypadku gdy opisywany jest prymitywny algorytm w stylu tych w artykule, faktycznie, język C jest dosyć czytelny, ale Olafie wyobraź sobie zamieszczenie tutaj fragmentu kodu realizującego ray-tracing albo sprowadzanie macierzy do postaci Hessenberga przy użyciu obrotów Givensa. Myślisz, że dużo z tego wyniesiesz? Również jestem przeciwny standaryzacji pseudokodu, ale, na Boga, nie katujmy użytkowników Wikipedii zbędnym kodem. Scythian 23:55, 10 kwi 2006 (CEST)
Coś w tym jest. W artykule do ray-tracingu rzeczywiście więcej by czytelnikowi powiedział pseudokod pokazujący ogólne założenia algorytmu (i nawet z premedytacją nieścisły), niż kod w konkretnym języku, którego zbyt trudno by się czytało.
A swoją drogą, skoro już robicie pseudokod, to dlaczego po angielsku ? Przecież to tylko ogranicza zrozumienie dla polskiego czytelnika, nieobytego z informatyką. (Obyci pewnie i tak sobie poradzą nawet z C) Olaf 04:16, 11 kwi 2006 (CEST)
-
-
- nie ma mowy o ganianiu czytelników za dodawanie konkretnych implementacji - nic nie ucieknie, można przerobić a implementacje dać do pl.wikisource Rnm 16:59, 1 lut 2007 (CET)
-
[edytuj] Brak rysunka
Gdzie jest rysunek obrazujący równanie sumy kwadratów?
[edytuj] Zastosowania
A co z zastosowaniam Ciągu?? Mozecie więcej o tym napisać?? Jak narazie widze tylko jedno, przy analizie algorytmów, a i tak niezbyt jasno opisana