[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

Witam serdecznie,

Nie wiem czy jestem już zmęczony, czy może coś przeoczyłem albo po prostu nie da się tego tak "ładnie" zrobić.

Jest funkcja dwóch zmiennych: \(\displaystyle{ f\left(x, y\right)}\)
Na wyjściu, może zwrócić jedną z wartości podanych w zbiorze: \(\displaystyle{ \left\{1, 2, 3\right\}}\) (lub też \(\displaystyle{ 0}\), aczkolwiek, najlepiej by go w wyniku zabrakło).

Zmienna \(\displaystyle{ x}\) oraz \(\displaystyle{ y}\) \(\displaystyle{ \subset \left\{0, 1, 2, 3\right\}}\)

Teraz jak miała by funkcja \(\displaystyle{ f}\) działać.

Przede wszystkim, chciałbym zaznaczyć, że "zabrałem" się do tego w systemie BIN, bo docelowo tak ma działać algorytm (tzn. najlepiej by było).

Wytłumaczę to na przykładzie.

Zawsze do porównania są dwie zmienne (czyli \(\displaystyle{ x}\) i \(\displaystyle{ y}\)).
Chciałbym by w zależności od danych wejściowych, funkcja zwracała wartości właśnie te ze zbioru jaki podałem wyżej.

\(\displaystyle{ f\left(0, 0\right) \rightarrow 1 \vee 2 \vee 3}\)
\(\displaystyle{ f\left(0, 1\right) \rightarrow 2 \vee 3}\)
\(\displaystyle{ f\left(0, 2\right) \rightarrow 1 \vee 3}\)
\(\displaystyle{ f\left(0, 3\right) \rightarrow 1 \vee 2}\)
\(\displaystyle{ f\left(1, 1\right) \rightarrow 2 \vee 3}\)
\(\displaystyle{ f\left(1, 2\right) \rightarrow 3}\)
\(\displaystyle{ f\left(1, 3\right) \rightarrow 2}\)
\(\displaystyle{ f\left(2, 2\right) \rightarrow 1 \vee 3}\)
\(\displaystyle{ f\left(2, 3\right) \rightarrow 1}\)
\(\displaystyle{ f\left(3, 3\right) \rightarrow 1 \vee 2}\)

Już próbowałem xor-ować, and-ować itp. różnych kombinacji.
Niektóre sprawdzały się tylko dla kilku powyższych przypadków, inne wcale.

Czy w ogóle da się stworzyć taką funkcję?

Oczywiście, można pogrupować wyniki i potem porównując z wzorcem, wyciągnąć wyniki z tablicy/pamięci/... (jako stałe), ale wolałbym tego uniknąć ("if else" zawsze wstawić można).

Jeśli da się to zrobić logiką binarną i ewentualnie jakimiś prostymi nie złożonymi operacjami (dodawanie, odejmowanie, mnożenie, przesuwanie itp.) to było by fajnie.
Jeśli miały by się tam pojawić jakieś wymyślne przeliczenia to gra nie warta świeczki, no ale może, jednak da się to sparametryzować.

Z góry przepraszam, jeśli coś nie jest jasne albo dziwnie brzmi - mam nadzieję, że nie używałem jakiś skrótów myślowych, jeśli tak to dajcie znać, postaram się dany fragment lepiej opisać.


Pozdrawiam i dziękuję za ewentualne podpowiedzi.
Ostatnio zmieniony 10 maja 2014, o 10:07 przez Afish, łącznie zmieniany 2 razy.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
a4karo
Użytkownik
Użytkownik
Posty: 22210
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3755 razy

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: a4karo »

Rzeczywiście, przeoczyłeś coś na lekcji polskiego. "Dwuch" to "fstyt"-- 9 maja 2014, o 22:50 --\(\displaystyle{ h:\{0,1,2,3\}^2\to 2^{\{1,2,3\}}}\) określamy tak:
\(\displaystyle{ h(a,b)=\{1,2,3\}\setminus \{a\}\setminus \{b\}}\).
\(\displaystyle{ g:2^{\{1,2,3\}}\to \{1,2,3\}}\) definiujemy jako \(\displaystyle{ g(A)=\min A}\).

Wtedy \(\displaystyle{ f=g\circ h}\)
matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

a4karo pisze: \(\displaystyle{ h:\{0,1,2,3\}^2\to 2^{\{1,2,3\}}}\) określamy tak:
\(\displaystyle{ h(a,b)=\{1,2,3\}\setminus \{a\}\setminus \{b\}}\).
\(\displaystyle{ g:2^{\{1,2,3\}}\to \{1,2,3\}}\) definiujemy jako \(\displaystyle{ g(A)=\min A}\).

Wtedy \(\displaystyle{ f=g\circ h}\)
Niezbyt jest to dla mnie jasne (jakie \(\displaystyle{ A}\)? \(\displaystyle{ min A}\)?)
Mógłbym to trochę bardziej rozwinąć?

Dzięki
a4karo
Użytkownik
Użytkownik
Posty: 22210
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3755 razy

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: a4karo »

najmniejsza liczba z zbiorze \(\displaystyle{ A}\)
matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

a4karo pisze:najmniejsza liczba z zbiorze \(\displaystyle{ A}\)
Hmm przeczytałeś całość mojego posta?

Nie za bardzo rozumiem w ogóle to co napisałeś? (jakie \(\displaystyle{ A}\) gdzie zdefiniowane? jak?)
Po drugie w poście pytałem o możliwie proste działania (dodawanie, odejmowanie,..., and, or...), a tu widzę piszesz \(\displaystyle{ min}\) (czyli to czego chciałem uniknąć)... złożenie funkcji?
a4karo
Użytkownik
Użytkownik
Posty: 22210
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 38 razy
Pomógł: 3755 razy

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: a4karo »

\(\displaystyle{ A}\) to dowolny podzbiór zbioru \(\displaystyle{ \{1,2,3\}}\). Tak sie skłąda, że wartościa funkcji \(\displaystyle{ h}\) jest zawsze zbiór niepusty, więc minimum jest dobrze okreslone.
Jak chcesz sie bawić w programowanie, to takie trywialne rzeczy jak minimum nie powinny byc skompliowane.
matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

a4karo pisze:\(\displaystyle{ A}\) to dowolny podzbiór zbioru \(\displaystyle{ \{1,2,3\}}\). Tak sie skłąda, że wartościa funkcji \(\displaystyle{ h}\) jest zawsze zbiór niepusty, więc minimum jest dobrze okreslone.
Jak chcesz sie bawić w programowanie, to takie trywialne rzeczy jak minimum nie powinny byc skompliowane.
Widzę, że nie czytasz ze zrozumieniem i w dodatku jesteś bardzo niemiły.
Napisze, że nie znasz odpowiedzi i tyle, albo napisz ją tak, bym ja głupiec mógł to zrozumieć.

Jeśli chcesz się droczyć i udowadniać jaki to nie jesteś wspaniały i genialny to Ci ułatwię jesteś geniuszem, jest ok?

Teraz do rzeczy, jeśli masz mi pisać cały czas w podobny sposób bez konkretów rzucając jakimiś definicjami bez zrumienia tematu jaki zadałem to jak Cię proszę nie pisz.

Pamiętaj, że Ciebie mogą ocenić równie szybko i niesłusznie.

Pozdrawiam
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: Afish »

Każdą liczbę \(\displaystyle{ n}\) zapisujesz jako \(\displaystyle{ n}\)-ty zapalony bit od prawej strony (matematycznie jest to \(\displaystyle{ 2^n}\)), czyli masz:
\(\displaystyle{ 0 = 0001\\
1 = 0010\\
2 = 0100\\
3 = 1000}\)

Teraz \(\displaystyle{ f(x,y) = \neg \left(\left(1<<x\right) \vee \left(1<<y\right) \right)}\). Z wyniku bierzesz dowolny zapalony bit i ponownie korzystasz z tabelki, albo obliczasz logarytm o podstawie dwa i bierzesz podłogę.
matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

Afish pisze:Każdą liczbę \(\displaystyle{ n}\) zapisujesz jako \(\displaystyle{ n}\)-ty zapalony bit od prawej strony (matematycznie jest to \(\displaystyle{ 2^n}\)), czyli masz:
\(\displaystyle{ 0 = 0001\\
1 = 0010\\
2 = 0100\\
3 = 1000}\)

Teraz \(\displaystyle{ f(x,y) = \neg \left(\left(1<<x\right) \vee \left(1<<y\right) \right)}\). Z wyniku bierzesz dowolny zapalony bit i ponownie korzystasz z tabelki, albo obliczasz logarytm o podstawie dwa i bierzesz podłogę.
Dzięki Afish.

Do podobnego kodowania również doszedłem, ale problem jest taki, że tu kodujesz za pomocą 4 bitów, a to mnie nie urządza (wystarczą mi 3 stany wyrażone 2 bitami + 0, tzn. źle... napisałem, że wystarczą powinienem użyć słowa, muszą - chodzi o to by zużyć jak najmniej w bajcie i jednocześnie jak najwięcej upakować). Logarytm raczej odpada.

Dziękuję raz jeszcze Afish za zainteresowanie.

Właściwie mogę uznać, że pytanie dostało satysfakcjonującą mnie odpowiedź - nie w prost, ale dla mnie wystarczającą - chyba, że ktoś ma jeszcze jakiś pomysł?

Pozdrawiam
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: Afish »

Jeżeli musisz mieścić się na kodowaniu binarnym, to nic mi nie przychodzi do głowy. Z drugiej strony rozwiązaniem jest zawsze jedna z trzech liczb (\(\displaystyle{ 1, 2}\) lub \(\displaystyle{ 3}\)), więc łatwo sprawdzić, która z nich spełnia wymagania.
matematok
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 9 maja 2014, o 23:07
Płeć: Mężczyzna
Lokalizacja: wawa

[Algorytmy] Funkcja dwóch zmiennych dla podanych wejść

Post autor: matematok »

Afish pisze:Jeżeli musisz mieścić się na kodowaniu binarnym, to nic mi nie przychodzi do głowy. Z drugiej strony rozwiązaniem jest zawsze jedna z trzech liczb (\(\displaystyle{ 1, 2}\) lub \(\displaystyle{ 3}\)), więc łatwo sprawdzić, która z nich spełnia wymagania.
Tak tak, zgadza się Afish

Jak pisałem w pierwszym poście, myślałem, że uda się wyłuskać jakąś zależność i pominąć lub co najmniej w maksymalnym stopniu uniknąć porównań/sprawdzeń itp., ale po wczorajszej walce do późna, stwierdziłem, że mimo wyników z jednej grupy i swoistych dyskretnych zależności, porównania muszą być (co najmniej jedno), ale chyba i tak rezultat - jak dla mnie - jest satysfakcjonujący

Serdecznie dziękuję.
Pozdrawiam
ODPOWIEDZ