Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Programowanie - poznawanie algorytmu czy jest sposób

20.10.2014 12:14
Revanisko
1
Revanisko
93
Senator

Programowanie - poznawanie algorytmu czy jest sposób

Dla czystej przyjemności rozwiązuję sobie zadania programistyczne (ale i tak chyba najbardziej pasuje taki dział :P).
I zacząłem się zastanawiać - czy istnieje jakiś sposób sensowny jak odkryć jakie działanie zostało wykonane na liczbach aby otrzymać dany wynik. Prościej będzie mi to wytłumaczyć na podstawie przykładowego zadania.

Mam skończyć program - otrzymuje on jedną zmienną(n) i jedną zwraca(z) - poza tym nie wiem nic apropo co się w nim wykonuje.

Wiem ,że jeżeli dam mu n=1 z będzie równe 0
dla n=2 z=1
dla n=7 z=91

Co zrobić aby odkryć co dzieje się w środku programu (odkryć algorytm)?
Czy jest na to jakiś sposób "matematyczny" czy po prostu kombinowanie ?

20.10.2014 12:32
2
odpowiedz
Likfidator
120
Senator

Czy jest na to jakiś sposób "matematyczny" czy po prostu kombinowanie ?
Ogólna metoda nie istnieje. Co więcej, prawie wszystkie algorytmy kryptograficzne opierają się na tym, że istnieją funkcje, których nie da się w łatwy sposób odgadnąć mając nawet milion przykładowych wartości tj. np.
f(0) = 3, f(1) = -4, f(2) = 1234.
Innym zagadnieniem jest aproksymacja funkcji http://pl.wikipedia.org/wiki/Aproksymacja
Można też stworzyć sieć neuronową, która też jest pewną formą aproksymacji. Jednak praca z sieciami neuronowymi wymaga sporego wyczucia, bo co prawda potrafią z dość dużą skutecznością rozwiązywać zagadnienia, których praktycznie nie da się rozwiązać standardowymi metodami, tak metodą prób i błędów trzeba dobrać strukturę sieci neuronowej, by "ucząc się" zwracała uwagę na konkretną cechę problemu. Zbyt prosta sieć nie będzie skuteczna, zbyt złożona sieć nauczy się drobnych szczególików materiałów testowych. Przygotowanie przykładowych próbek do nauki też jest bardzo ważne w przypadku sieci neuronowych. Kiedyś czytałem o tym jak armia USA pracowała nad siecią, która miała rozpoznawać czy na zdjęciu satelitarnym widać instalacje wojskowe czy nie. Sieć nauczyła się rozpoznawać materiały testowe w 100%, ale w praktyce w ogóle nie działała. Okazało się, że w materiałach testowych zdjęcia z instalacjami wojskowymi były znacznie jaśniejsze niż te bez i sieć uznała to za główne kryterium wyboru. Sieć neuronowa nie wie co to jest instalacja wojskowa, uczy się odpowiadając na pytania i dostaje odpowiedź dobrze/źle.

20.10.2014 14:30
3
odpowiedz
DEXiu
151
Senator

Tak jak napisał Likfidator - ogólnej metody nie ma i z matematycznego punktu widzenia być nie może (jakakolwiek skończona liczba przykładów wejścia i wyjścia nie definiuje jednoznacznie funkcji). Ale w praktyce można próbować dopasować funkcję na podstawie kilku/kilkunastu punktów - próbując dopasować wielomiany kolejnych stopni, funkcje wykładnicze, logarytmiczne, wymierne...

20.10.2014 16:30
legrooch
4
odpowiedz
legrooch
237
MPO Squad Member

Kombinujesz, jeżeli to jest na papierze.
Jak w formie elektronicznej, to próbujesz uzyskać kod o ile nie był przerzucony jakimś dotfuscatorem.

20.10.2014 17:55
Sanchin
5
odpowiedz
Sanchin
206
Orchid Samurai

o ile nie był przerzucony jakimś dotfuscatorem

Obfuskatorem, nie zakładajmy od razu, że to DotNot :D

20.10.2014 18:11
6
odpowiedz
Tuminure
105
Senator

Równie dobrze może to być "algorytm":
if(n == 1) z = 0;
elseif(n == 2) z = 1;
else z = 91;

(w takim pseudokodzie, bo na golu klamry nie działają)

20.10.2014 18:36
Revanisko
7
odpowiedz
Revanisko
93
Senator

zadanie polega na tym ze ma byc jak najkrócej to raz , a dwa ,że jeśli da się tylko
if(n == 1) z = 0;
elseif(n == 2) z = 1;
else z = 91;
to daja nastepne zmienne i np dla 5 ma byc iles tam - więc chodzi o znalezienie konkretnego algorytmu :)

Glownie chodziło mi o to czy jest jakiś sposób o którym nie wiem czy po prostu kombinowanie ;)

20.10.2014 21:04
8
odpowiedz
112
3 grosze

Równie dobrze można zgadnąć:

z=(2*n^2)-7
jeśli z<0 to z=0

Forum: Programowanie - poznawanie algorytmu czy jest sposób