Reprezentarea cod algebric

voturi
5

Am un număr de algoritmi mici, pe care aș dori să scrie într-o lucrare. Ele sunt relativ scurte, și concis. Cu toate acestea, în loc să le scrie în pseudo-cod (à la Cormen sau chiar Knuth), aș dori să scrie o reprezentare algebrică a acestora (mai liniară și o mai bună redare LaTeX). Cu toate acestea, eu nu pot găsi resurse ca la cea mai bună notația pentru acest lucru, dacă există ceva: de exemplu, cum reprezint o buclă? Dacă? Adăugarea unui tuplu la o listă?

A fost vreunul dintre voi întâlnit această problemă, și într-un fel rezolvat?

Mulțumiri.

EDIT : Mulțumesc, oameni. Cred că am făcut o treabă proastă la frazare întrebarea. Aici merge din nou, în speranța că mai clar fac: ceea ce este comun notația pentru a vorbi despre bucle și dacă-atunci clauzele într - o notație matematică? De exemplu, eu pot folosi $acc \leftarrow acc \cup \langle i,i+1 \rangle$pentru a reprezenta „adauga“ metoda unei liste.

Întrebat 28/01/2010 la 20:50
sursa de către utilizator
În alte limbi...                            


8 răspunsuri

voturi
0

Ceva de genul acest site descrie?

Publicat 28/01/2010 la 20:57
sursa de către utilizator

voturi
1

S-ar putea să ia o privire la Haskell. Haskell formate bine în latex, are o sintaxă algebrice frumos, și puteți chiar compila un fișier de latex cu Haskell în ea, cu condiția codul este învelit în \begin{code}și \end{code}. Vezi aici: http://www.haskell.org/haskellwiki/Literate_programming . Există , probabil , instrumente de programare știință de carte pentru alte limbi.

Publicat 28/01/2010 la 20:59
sursa de către utilizator

voturi
2

Aș copia Knuth. Puțini știu cum să comunice mai bine decât să-l într-un cadru informatică.

Publicat 28/01/2010 la 21:00
sursa de către utilizator

voturi
-1

APL ? Singura problemă este că puțini oameni pot citi.

Publicat 28/01/2010 la 21:00
sursa de către utilizator

voturi
8

Nu face asta. Vi se abat de la ceea ce oamenii așteaptă să vadă atunci când citesc o lucrare despre algoritmi. Ar trebui să urmeze practicile așteptate; ideile tale sunt mai susceptibile de a obține atenția pe care îl merită. Cand esti in Roma fa ca romanii.

Formatarea cod (sau pseudocod ca poate fi) într - o hârtie LaTeXed este foarte ușor. A se vedea, de exemplu, formatarea codului în LaTeX .

Publicat 28/01/2010 la 21:03
sursa de către utilizator

voturi
1

Lisp a început ca o notație matematică a unui model de calcul, astfel încât lectorul ar avea un instrument mai bun decât mașinile Turing. Prin accident, se dovedește că acesta poate fi pus în aplicare în asamblare - astfel Lisp, sa născut limbajul de programare.

Dar eu nu cred că acest lucru este cu adevărat ceea ce căutați, deoarece modelul de calcul care descrie bâlbâi nu are bucle: recursie este folosit în loc. Sintaxa derivă din algebra în cazul în care aparatul dentar reprezintă evaluarea-această-și-substitut-the-rezultat. Într-adevăr, modelul Lisp de calcul este, în principiu de substituție - ceea ce algebra este, în esență.

Într-adevăr, cele mai multe limbaje funcționale, cum ar fi Lisp, Haskell și Erlang sunt derivate din matematică. Haskell este de fapt un rezultat de a dovedi că lambda calcul poate fi utilizat pentru a implementa sisteme de tip. Deci Haskell, cum ar fi Lisp sa născut din matematică pură. Dar, din nou, sintaxa nu este ceea ce ar fi folosit, probabil, la.

Puteți explica cu siguranță sintaxa Lisp și Haskell matematicienilor și le-ar trata ca pe un „joc“. constructe de limbi străine, cum ar fi buclele, recurențe și condiționale poate fi dovedită din regulile jocului, mai degrabă decât orbește pus în aplicare ca și în alte limbi. Acest lucru te va duce in taramurile combinatronics, o altă ramură a matematicii. Într-adevăr, în combinatronics, chiar și conceptul de numere pot fi construite din regulile jocului, mai degrabă decât să fie o parte nativ al limbii (Google Biserica numerale).

Deci, au o privire la Lisp / schema, Erlang și Haskell, dacă doriți. Erlang are în special sintaxa aproape de ceea ce doriți:

add(a,b) -> a + b

Dar recomandarea mea este de a scrie în pseudocod ca-C. Este un fel de cel mai mic numitor comun în limbaje de programare. Are o sintaxă care este destul de ușor de înțeles și de curat. Iar sintaxa funcției derivă chiar din funcții în matematică. Amintiți - vă f(x)?

Ca un plus, matematicieni sunt folosite pentru a scrie C, statisticieni sunt folosite pentru scrierea C (deși, în general, ei preferă R), fizicienii sunt utilizate pentru a scrie C, programatorii sunt utilizate cel puțin pentru uita la C (știu câțiva care au niciodată atins C).

De fapt, zgâria asta. Ați menționat că publicul țintă sunt statisticieni. Scrieți R

Publicat 28/01/2010 la 21:47
sursa de către utilizator

voturi
7

Eu văd dacă-expresii matematice în notație destul de des. Lucru obișnuit pentru o buclă este o relație de recurență , sau echivalent, o funcție definită recursiv.

Iată modul în care funcția Ackermann este definită pe Wikipedia, de exemplu:

A (m, n) = n + 1 dacă m = 0;  A (m-1, 1), în cazul în care m> 0 și n = 0;  și A (m-1, A (m, n-1)) în cazul în care m> 0 și n> 0.

Această imagine este frumos, deoarece se simte matematic în aroma și totuși ai putea tastați în mod clar în aproape exact așa cum au scris și o punere în aplicare. Nu este întotdeauna posibil să se realizeze acest lucru.

Alte notații matematice care corespund bucle includ Σ-notație însumări și notație set-constructor .

Sper că acest lucru răspunde la întrebarea ta! Dar daca scopul tau este de a descrie modul în care se face ceva și să aibă pe cineva să înțeleagă, cred că este, probabil, o greșeală să presupunem că matematicieni ar prefera să vadă ecuații. Nu cred că sunt instrumente interschimbabile (în ciuda Turing echivalenței). Dacă algoritmul dvs. implică structuri de date mutabile, cod de procedură este, probabil, va fi mai bine decât ecuațiile pentru a explica ea.

Publicat 29/01/2010 la 00:21
sursa de către utilizator

voturi
2

Un simbol pentru bucle generale nu există; de obicei , se va utiliza operatorul însumare . „ în cazul în care “ este reprezentat folosind implicații și pentru a „adăuga un tuplu la o listă“ ar trebui să utilizați uniunea .

Cu toate acestea , în general, un pic de limbuție nu este neapărat un lucru rău - uneori, mai ales pentru algoritmi complecși, cel mai bine este să se scrie în limba engleză simplu, folosind exemple și diagrame. Acest lucru este valabil și pentru dublu-non-codificatori.

Gandeste-te: atunci când ai citit un text matematica carte despre algoritmul lui Euclid pentru GCD, sau sita de Eratostene, după cum este scris? De obicei, algoritmul în sine este în proză, în timp ce dovada a algoritmului este în cazul în care simbolurile matematice mint.

Publicat 29/01/2010 la 02:00
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more