Funzione per un algoritmo

moneder
Ciao a tutti!
Per riuscire a formare un algoritmo, ho bisogno di trovere una funzione tale che:
Con $x \in \mathbb{N}$

Per $ x>0 \Rightarrow f(x)=1$
Per $ x=0 \Rightarrow f(x)=0 $

Ho provato con somme, prodotti, frazioni, esponenziali, logaritmi, funzioni goniometriche, combinandole; ma niente, non riesco.
Sapreste individuare la formula? Grazie infinite!

Risposte
hamming_burst
se è per un algoritmo tale funzione deve avere significato nell'algoritmo e per il problema a cui è legato. Oppure questa $f$ è descrivente dell'algoritmo come fun di costo?

cmq è una funzione a gradini sui naturali.

apatriarca
Ma quale sarebbe il dominio di tale funzione? I reali? Oppure semplicemente i naturali (ma in tal caso la funzione è già ben definita)? E l'immagine? Deve essere solo 0 o 1 oppure l'intervallo [0,1] oppure.. ? Quale regolarità deve avere la funzione? Deve essere solo continua? Deve essere differenziabile? Analitica? Per cosa la dovresti utilizzare? Non ci hai detto abbastanza per darti una risposta soddisfacente.

moneder
Grazie per le risposte.

Io non ho ancora fatto i differenziali, la matematica dei continui, quindi non so come rispondervi.
Quello che posso dirvi è che il suo dominio è costituito solo dai numeri naturali e da zero: $D=\mathbb{N}$
Il codominio è 0 e 1: $C={0;1}$ (credo si scriva così)
Quando la variabile indipendente assume un valore qualsiasi, maggiore di zero, appartenente ad $mathbb{N}$, allora la variabile dipendente deve valere sempre 1. Quando la variabile indipendente è 0, quella dipendente deve valere 0.

Questo mi serve per il seguente motivo, un giochino che mi è venuto in mente:

Avendo una griglia numerata in senso crescente, che va da $1$ a $+\infty$, di un qualsiasi numero di colonne pari a $d$, è possibile calcolare le coordinate di una casella numerata.



Per calcolare le coordinate di una casella occorre, dividere il numero $n$ della casella, in questo caso 32, per $d$, ovvero 7, e si ottiene 4 con il resto di 4.
Le coordinate $y$ corrispondono al quoziente più 1. Le coordinate $x$ corrispondono al resto, cioè 4.Indicando con $r_(n/d)$ il resto, si può riassumere così:
$x=r_(n/d)$
$y=n/d+1$
La casella $n=32$ possiede coordinate $x=4$, $y=5$.

Tuttavia, nell'ultima colonna, le cui caselle se divise per $d$ dànno un rapporto senza resto, la formula per le $y$ non va bene.
E' per questo che sarebbe utile trovare un'espressione tale che se la variabile $r_(n/d)$ è maggiore di 0, io possa ottenere 1, se è 0, io ottenga 0. Cioè, non più $r_(n/d)+1$, ma $r_(n/d)+f(r_(n/d))$ in modo che la funzione $f(r_(n/d))$ dia 1 qualora $r_(n/d)$ sia maggiore di 0, e che dia 0 qualora $r_(n/d)$ sia 0.

Si potrebbe poi trovare il percorso minimo $p$ tra una casella e un'altra, semplicemente conoscendo l'$n$ delle due caselle, con la seguente equazione:
$p=(x_1-x_2)+(y_1-y_2)$ che equivale a:

$p=(r_((n_1)/d)-r_((n_2)/d))+{[(n_1)/d+f(r_((n_1)/d))]-[(n_1)/d+f(r_((n_1)/d))]}$

Nel caso delle caselle 9 e 32, il percorso minimo è 5. Infatti $x_32=4$, $y_32=5$, $x_9=2$, $y_9=2$ quindi $p=(4-2)+(5-2)=5$
N.B: l'omino può spostarsi solo orizzontalmente e verticalmente e non diagonalmente.

Se solo si potesse trovere $f(r_(n/d))$...


Spero di essere stato chiaro, attendo risposte e vi ringrazio in anticipo.

Raptorista1
Probabilmente dirò una st*****ta, ma se metti \(y = \frac{n - 1}{d} + 1\) non funziona?

moneder
mi sa di no, ma grazie per avermi letto :)

moneder
Graficamente $f(r_(n/d))$ è


apatriarca
Guarda che ti stai complicando inutilmente la vita per le seguenti ragioni:
1. In informatica è più comune lavorare con indici che partono da zero per ottime ragioni.
2. Il tuo algoritmo dovrebbe funzionare seguendo l'idea di Raptorista.
3. La tua funzione è semplicemente:
\[ f(x) = \begin{cases} 0 \quad x = 0 \\ 1 \quad \text{altrimenti} \end{cases} \]

moneder
Grazie per la risposta.

Ho pensato a questo: $f(r_(n/d))=1-0^(r_(n/d))$

Funziona no?? Evviva!

moneder
no...credo di essermi confuso alla grande

apatriarca
Dal punto di vista informatico, non ha molto senso intendere la funzione diversamente da quanto ho fatto. Un semplice if è infatti perfettamente sufficiente a considerare il caso particolare. Inutile scomodare funzioni trigonometriche o altro che sarebbero solo più lente.

moneder
Capito.
Ma riguardandola, $f(r_(n/d))=1-0^(r_(n/d))$ mi sembra che sia giusta vero?

Quindi viene

$p=(r_((n_1)/d)-r_((n_2)/d))+{[(n_1)/d+1-0^(r_(n/d))]-[(n_2)/d+1-0^(r_(n/d))]}$

hamming_burst

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.