Representerer kode algebraisk

stemmer
5

Jeg har en rekke små algoritmer som jeg ønsker å skrive opp i et papir. De er relativt kort, og konsis. Men i stedet for å skrive dem i pseudo-kode (à la Cormen eller Knuth), vil jeg gjerne skrive en algebraisk representasjon av dem (mer lineær og bedre LaTeX gjengivelse). Men jeg kan ikke finne ressurser til den beste notasjon for dette, hvis det er noe: f.eks hvordan jeg representerer en loop? Hvis? Tillegg av en tuppel til en liste?

Har noen av dere støtt på dette problemet, og noe løst det?

Takk.

EDIT : Takk, folk. Jeg tror jeg gjorde en dårlig jobb på frasering spørsmålet. Her går igjen, håper jeg gjøre det klarere: hva er vanlig notasjon for å snakke om løkker og if-then klausuler i en matematisk notasjon? For eksempel, kan jeg benytte $acc \leftarrow acc \cup \langle i,i+1 \rangle$for å representere den add metode for en liste.

Publisert på 28/01/2010 klokken 19:50
kilden bruker
På andre språk...                            


8 svar

stemmer
0

Noe som dette nettstedet beskriver?

Svarte 28/01/2010 kl. 19:57
kilden bruker

stemmer
1

Du kan ta en titt på Haskell. Haskell formater godt i latex, har en fin algebraisk syntaks, og du kan til og med lage en latex-fil med Haskell i det, forutsatt at koden er innpakket i \begin{code}og \end{code}. Se her: http://www.haskell.org/haskellwiki/Literate_programming . Det er sannsynligvis rate programmeringsverktøy for andre språk.

Svarte 28/01/2010 kl. 19:59
kilden bruker

stemmer
2

Jeg vil kopiere Knuth. Få vet hvordan å kommunisere bedre enn ham i en datavitenskap setting.

Svarte 28/01/2010 kl. 20:00
kilden bruker

stemmer
-1

APL ? Det eneste problemet er at få mennesker kan lese den.

Svarte 28/01/2010 kl. 20:00
kilden bruker

stemmer
8

Ikke gjør dette. Du avviker fra hva folk forventer å se når de leser en artikkel om algoritmer. Du bør følge forventede praksis; ideene dine er mer sannsynlig å få den oppmerksomheten som de fortjener. Når du er i Roma, gjør som romerne gjør.

Formateringskode (eller pseudokode som det kan være) i en LaTeXed papir er meget enkelt. Se for eksempel formateringskode i LaTeX .

Svarte 28/01/2010 kl. 20:03
kilden bruker

stemmer
1

Lisp startet som en matematisk notasjon av et datamodell slik at foreleser ville ha et bedre verktøy enn Turing maskiner. Ved et uhell, viser det seg at det kan gjennomføres i forsamlingen - og dermed Lisp, programmeringsspråket ble født.

Men jeg tror ikke dette er virkelig hva du er ute etter da computing modellen som lespe beskriver ikke har løkker: rekursjon brukes i stedet. Syntaksen er avledet fra algebra hvor bukseseler betegner evaluere-denne-og-substitutt-the-resultatet. Faktisk, Lisp modell for databehandling er i utgangspunktet substitusjon - hva algebra egentlig er.

Faktisk er de fleste funksjonelle språk som Lisp, Haskell og Erlang hentet fra matematikk. Haskell er faktisk et resultat av å bevise at lambdakalkyle kan brukes til å implementere typen systemer. Så Haskell, som Lisp ble født ut av ren matematikk. Men igjen, er syntaksen ikke hva du vil sannsynligvis bli brukt til.

Du kan sikkert forklare Lisp og Haskell syntaks til matematikere og de ville behandle det som et "spill". Språkkonstruksjoner som løkker, rekursjon og conditionals kan bevises ut av spillereglene i stedet for blindt implementert som i andre språk. Dette vil føre deg inn i verdener av combinatronics, en annen gren av matematikk. Faktisk, i combinatronics, selv begrepet tall kan bygges ut av spillereglene i stedet for å være en innfødt del av språket (google kirke Tall).

Så ta en titt på Lisp / Scheme, Erlang og Haskell hvis du vil. Erlang har spesielt syntaks i nærheten av hva du vil:

add(a,b) -> a + b

Men min anbefaling er å skrive i C-lignende pseudokode. Det er liksom den laveste fellesnevneren i programmeringsspråk. Har en syntaks som er ganske lett å forstå og ren. Og funksjonen syntaks kommer selv fra funksjoner i matematikk. Husk f(x)?

Som et pluss, er matematikere vant til å skrive C, er statistikere vant til å skrive C (selv om de vanligvis foretrekker R), er fysikerne vant til å skrive C, programmerere brukes til minst å se på C (jeg vet noen som aldri har rørt C).

Egentlig klø det. Du nevner at målgruppen er statistikere. Skriv i R

Svarte 28/01/2010 kl. 20:47
kilden bruker

stemmer
7

Jeg ser om-uttrykk i matematisk notasjon ganske ofte. Det vanlige for en sløyfe er en gjentakelse forhold , eller ekvivalent, en funksjon som er definert rekursivt.

Her er hvordan Ackermann-funksjonen er definert på Wikipedia, for eksempel:

A (m, n) = n + 1 når m = 0;  A (m-1, 1) hvis m> 0 og n = 0;  og A (m-1, A (m, n-1)) dersom m> 0 og n> 0.

Dette bildet er fint fordi det føles matematisk i smaken og ennå du kan tydelig skriver det i nesten nøyaktig som skrevet og har en implementering. Det er ikke alltid mulig å oppnå det.

Andre matematiske notasjoner som tilsvarer sløyfer inkludere Σ-notasjon for summering og oppsett byggmester notasjon .

Jeg håper dette besvarer spørsmålet ditt! Men hvis målet er å beskrive hvordan noe er gjort og har noen forstår, tror jeg det er sannsynligvis en feil å anta at matematikere foretrekker å se ligninger. Jeg tror ikke de er utskiftbare verktøy (til tross Turing ekvivalens). Hvis algoritmen innebærer foranderlig datastrukturer, er prosedyrekode trolig kommer til å være bedre enn ligninger for å forklare det.

Svarte 28/01/2010 kl. 23:21
kilden bruker

stemmer
2

Et symbol for generelle sløyfer eksisterer ikke; vanligvis vil du bruke summering operatør . "hvis" er representert ved hjelp implikasjoner , og å "legge til et tuppel i en liste" du ville bruke union .

Men generelt er litt av detaljnivå ikke nødvendigvis en dårlig ting - noen ganger, spesielt på komplekse algoritmer, er det best å stave det ut i vanlig engelsk, ved hjelp av eksempler og diagrammer. Dette er dobbelt-sant for ikke-programmerere.

Tenk på det: når du leser en matte tekst-bok på Euklids algoritme for GCD, eller sil av Eratosthenes, hvordan er det skrevet? Vanligvis algoritmen selv er i prosa, mens bevis av algoritmen er der matematiske symboler ligge.

Svarte 29/01/2010 kl. 01:00
kilden bruker

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