-
Data: 2019-12-11 12:53:13
Temat: Re: Ile czasu zajmie komputerowi rozszerzony algorytm euklidesa?
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu środa, 11 grudnia 2019 04:40:28 UTC+1 użytkownik osobliwy nick napisał:
> > Przychylam się do tej sugestii.
> >
> Ok. Zmotywowaliście mnie. Będę myślał w takim razie o powrocie do tematu
programowania. A właściwie o zaczęciu od początku, bo pomimo, że wiem co to
programowanie, jak to się robi itd., to moje praktycznie umiejętności są znikome. Co
do języka myślałem o C++, bo często mam do policzenia jakieś matematyczne rzeczy, a
ten język kojarzy mi się z takimi inżynierskimi i matematycznymi zastosowaniami. Poza
tym łatwo znaleźć materiały na jego temat.
Ja osobiście raczej bym odradzał C++ do Twoich zastosowań.
Jest to język nadmiernie skomplikowany, i nawet nie za dobrze radzi sobie z liczbami
(domyślnie implementuje arytmetykę modulo 2^32 albo 2^64)
Raczej bym polecał albo Racket, bo jest bardzo prosty i jest dla niego dużo dobrych
materiałów dydaktycznych, a do tego wspiera od razu arytmetykę o dowolnej precyzji
oraz liczby wymierne. Spośród materiałów dydaktycznych jest książka "How To Design
Programs", dostępna za darmo tutaj (jakościowo o rzędy wielkości lepsza od
jakichkolwiek materiałów o C++, z jakimi miałem styczność):
https://htdp.org/2019-02-24/
Na podstawie tej książki powstał kurs o systematycznym projektowaniu programów:
https://www.youtube.com/channel/UC7dEjIUwSxSNcW4PqNR
QW8w
Jest też nieco starsza, ale wciąż nie chcąca się zestarzeć książka "Structure and
Interpretation of Computer Programs" (wydana swego czasu też po Polsku przez WNT jako
"Struktura i Interpretacja Programów Komputerowych"), udostępniona za darmo na
stronie MIT:
https://mitpress.mit.edu/sites/default/files/sicp/in
dex.html
Kurs, na potrzeby którego książka została opracowana, również można znaleźć na
youtubie:
https://www.youtube.com/watch?v=-J_xL4IGhJA&list=PLE
18841CABEA24090
Warto ewentualnie rozważyć język Haskell, który jest bardziej złożony, ale ma dość
wydajną implementacje, i jest też sobie w stanie poradzić z dużymi liczbami (i pod
względem składni mocno przypomina klasyczną notację matematyczną).
Rozwiązanie podlinkowanego przez Ciebie przykładu wyglądałoby tak.
Najpierw definiujemy sobie iloczyn kartezjański listy list, żeby móc generować ciągi
wartośći x1, ..., xN:
cartprod [] = [[]]
cartprod (xs:xss) = [x:ys | x <- xs, ys <- cartprod xss]
wyprowadzenie powyższej definicji możesz znaleźć tutaj:
http://myhaskelljournal.com/cartesian-product-of-lis
ts/
następnie definiujemy produkt kartezjański
cartpow l n = cartprod $ take n $ repeat l
gdzie (repeat l) tworzy nieskończoną listę powtórzeń listy l, zaś take n bierze tylko
n początkowych elementów.
Ponieważ jest u Ciebie warunek, że
x1 >= x2 >= ... >= xN
to możemy wybrać tylko te punkty z iloczynu kartezjańskiego, których wartościami są
nierosnące ciągi:
nonasc (x:y:zs) = x >= y && nonasc (y:zs)
nonasc _ = True
Wreszcie, funkcja budująca zbiory punktów [x1, ..., xN] może mieć postać:
dom x n = [p | p <- (cartpow [0 .. x] n), nonasc p]
czyli zbiór wszystkich punktów z potęgi kartezjańskiej, których kolejne współrzędne
tworzą ciąg nierosnący.
Można łatwo sprawdzić, że np. (dom 3 2) da nam wartość
[[0,0],[1,0],[1,1],[2,0],[2,1],[2,2],[3,0],[3,1],[3,
2],[3,3]]
I teraz chcemy znaleźć elementy, które spelniają Twoje kryterium.
Żeby Haskell obsłużył liczby wymierne, trzeba załadować moduł Data.Ratio:
import Data.Ratio
Operator dzielenia wymiernego liczb całkowitych jest wówczas wyrażany symbolem %.
Pozwala to zdefiniować nam zbiór interesujących Cię liczb jako:
ws x y p = [(sum [(p^xn)%(2^xn) | xn <- seq]) * ((2^(y-1))%(2^(x+y)-p^y))
| seq <- (dom x (y-1))]
i wtedy możemy sprawdzić, że wyrażenie (ws 3 3 3) da nam listę
[8 % 37,
10 % 37,
12 % 37,
13 % 37,
15 % 37,
18 % 37,
35 % 74,
39 % 74,
45 % 74,
27 % 37]
Jest to inny zbiór od tego, który podałeś w swoim drugim poście, więc możliwe, że źle
zrozumiałem specyfikację.
W każdym razie "rozmawiając" sobie z interpreterem Racketa albo Haskella, możesz dość
łatwo przeszukać interesujące Cię dziedziny.
Następne wpisy z tego wątku
- 11.12.19 20:46 Maciej Sobczak
- 11.12.19 21:47 g...@g...com
- 12.12.19 09:59 Roman Tyczka
- 12.12.19 19:25 Maciej Sobczak
- 12.12.19 23:04 g...@g...com
- 13.12.19 21:06 Maciej Sobczak
- 13.12.19 22:37 g...@g...com
- 14.12.19 02:44 osobliwy nick
- 14.12.19 02:58 osobliwy nick
- 14.12.19 09:01 Mateusz Viste
- 14.12.19 11:10 g...@g...com
- 14.12.19 11:16 Piotr Chamera
- 14.12.19 11:18 Piotr Chamera
- 14.12.19 20:02 Maciej Sobczak
- 14.12.19 20:18 Maciej Sobczak
Najnowsze wątki z tej grupy
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-16 deltaT w pompie ciepla
- 2025-07-16 dron na granicy polsko niemieckiej
- 2025-07-16 Warszawa => Senior IT Recruitment Consultant <=
- 2025-07-16 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-16 Gdańsk => Delphi Programmer <=
- 2025-07-16 Warszawa => BI Developer <=
- 2025-07-16 Gdańsk => Programista Delphi <=
- 2025-07-16 chroń PESEL dziecka
- 2025-07-16 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-16 Gdańsk => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-07-16 Kraków => Kotlin Developer <=
- 2025-07-16 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-16 Tadeusz Rolke RIP
- 2025-07-14 Dwa dylematy
- 2025-07-14 Re: Dwa dylematy