| |
|
|
p.specht
| dans quelle et wieviele verschiedene "Zerhackungs-Anordnungen" peux on une Meßstab de z.B. 70 cm Longueur piocher, vorausgesetzt qui Schnitte sommes äusserst dünn (laser?) et alle Einzelteile doit 1 cm ou bien un Vielfaches en long son? Dabei soll qui physische Anordnung qui Einzelstücke égal son, zusammen doit vous seulement 70 cm ergeben.
qui Frage taucht u.a. dans qui Wellenphysik, dans qui Technischen chimie, mais aussi beim saisir de Standardprodukten dans vorggegebene Schachteln sur. qui Herren Zoghbi et Stojmenovic konnten en supplément 1998 Ihren ZS1-Algorithmus présenter, qui immerhin viermal plus rapide comme alle bisherigen était. dans reinem XProfan braucht on naturellement quelque chose länger comme dans Maschinencode, mais trop Demo-Zwecken reicht cela nachstehende Machwerk durchaus. qui Antwort: 70 peux sur 4.087.967 Arten dans Stücke gehackt plus einmal entier gelassen volonté.
Quellenangabe: Artikel aus "Fast Algorithms for Generating Integer Partitions. International journal of ordinateur Mathematics, 70, 1998"
Titre de la fenêtre "Algorithm ZS1: Erzeugung einer vollständigen, "+\
"revers-geordneten Partitionierung sans Wiederholung"
'Q: Antoine Zoghbi, Ivan Stojmenovic: presque Algorithms for Generating Integer Partitions
' published dans: "International journal of ordinateur Mathematics, 70, 1998, 319-332."
'S: [url]https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.42.1287&rep=rep1&type=pdf[/url]
'T: Translation to XProfan 11.2a 2016-07ff by P.Specht, Vienna/Austria
'No Warranty whatsoever! sans jedwede Gewähr! situation juridique ungeprüft.
Fenêtre Style 24:Fenêtre 0,0-%maxx,%maxy:font 2:randomize
declare z$,z&,tm&,cnt&,bench&: Rept:
Cls:Imprimer "\n ZAHL, qui partitioniert volonté soll (0: Ende; Minuszahl: seulement Zeitmessung)? : ";
z$=»:input z$:bench&=0:cas val(z$)<0:bench&=1:z&=rnd(30):cas z$>»:z&=abs(val(z$))
si z&=0:imprimer "\n Ergebnis: le vide la quantité.\n\n Programme wird finissez! ":beep:waitinput 4000:FIN:endif
cas bench&:imprimer "\n Messung fonctionne ..."
tm&=&GetTickCount
cnt& = Algorithm_ZS1(z&,bench&)
imprimer "\n ";cnt&;" Partitionen erzeugt."
si bench& : tm&=&GetTickCount-tm&
imprimer "\n Laufzeit pour n = ";z&;": ";tm&;" [ms] bzw. ";tm&/1000;" [s] bzw. ";tm&/60000;" [min]"
endif
sound 2000,60
waitinput
Goto "Rept"
FIN
Proc Algorithm_ZS1 :parameters n&,bench&
declare x&[n&],i&,m&,h&,r&,t&,cnt&
whileloop n&
x&[&loop]=1
endwhile
x&[1]=n&
m&=1:h&=1
cnt&=1
casenot bench&:imprimer "\n>>> ";x&[1]'show or do something useful
tandis que x&[1]<>1
si x&[h&]=2'Easy cas, applies often
' h is le index of le charge part of partition which is greater than 1
' m is le number of parts.
inc m&:x&[h&]=1:dec h&
d'autre
r&=x&[h&]-1
t&=m&-h&+1
x&[h&]=r&
tandis que t&>=r&
inc h&
x&[h&]=r&
t&=t&-r&
endwhile
si t&=0
m&=h&
d'autre
m&=h&+1
si t&>1
inc h&:x&[h&]=t&
endif
endif
endif
inc cnt&
ifnot bench&:imprimer " ";:whileloop m&:imprimer x&[&Boucle],:endwhile:imprimer:endif
'or do something useful with le result line
endwhile
return cnt&
ENDPROC
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 20.05.2021 ▲ |
|
|
|
|
p.specht
| ici qui AUFSTEIGENDE Version qui Partitionierungsmethode: qui ZS2-Algorithmus, nachgeliefert comme Ergänzung zum obigen Beitrag.
Titre de la fenêtre "Algorithm ZS2: Erzeugung einer vollständigen, "+\
"AUFSTEIGEND geordneten Partitionierung sans Wiederholung"
'Q: Antoine Zoghbi, Ivan Stojmenovic: presque Algorithms for Generating Integer Partitions
' published dans: "International journal of ordinateur Mathematics, 70, 1998, 319-332."
'S: https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.42.1287&rep=rep1&type=pdf
'T: Translation to XProfan 11.2a 2016-07ff by P.Specht, Vienna/Austria
'No Warranty whatsoever! sans jedwede Gewähr!
'
'Test your results against "Partition Numbers" of https://oeis.org/A000041
'00>>> 1, 1, 2, 3, 5, 7, 11, 15, 22, 30,
'10>>> 42, 56, 77, 101, 135, 176, 231, 297, 385, 490,
'20>>> 627, 792, 1002, 1255, 1575, 1958, 2436, 3010, 3718, 4565,
'30>>> 5604, 6842, 8349, 10143, 12310, 14883, 17977, 21637, 26015, 31185,
'40>>> 37338, 44583, 53174, 63261, 75175, 89134, 105558, 124754, 147273,173525
'50>>> ...
Fenêtre Style 24:Fenêtre 0,0-%maxx,%maxy:randomize:font 2
declare z$,z&,tm&,cnt&,bench&: Rept:
Cls:Imprimer "\n ZAHL, quelle partitioniert volonté soll (0: Ende; Minuszahl: seulement Zeitmessung)? : ";
z$=»:input z$:bench&=0:cas val(z$)<0:bench&=1:z&=rnd(30):cas z$>»:z&=abs(val(z$))
si z&=0:imprimer "\n Ergebnis: le vide la quantité.\n\n Programme wird finissez! ":beep:waitinput 4000:FIN:endif
cas bench&:imprimer "\n Messung fonctionne ..."
tm&=&GetTickCount
cnt& = Algorithm_ZS2(z&,bench&)
tm&=&GetTickCount-tm&
imprimer "\n ";cnt&;" Partitionen erzeugt."
si bench&:imprimer "\n Laufzeit pour n = ";z&;": ";tm&;" [ms] bzw. ";tm&/1000;" [s] bzw. ";tm&/60000;" [min]"
endif :sound 2000,60:waitinput
Goto "Rept"
FIN
Proc Algorithm_ZS2 :parameters n&,bench&
declare x&[n&],i&,m&,h&,r&,j&,cnt&
si n&=1:imprimer " ";1 :cnt&=1:goto "ZS2_exit":endif
:whileloop n&:x&[&loop]=1:endwhile
cnt&=1
ifnot bench&:imprimer "\n>>> ";:whileloop n&:imprimer x&[&Boucle],:endwhile:imprimer
endif'or do something useful with le result line
x&[0]=-1:x&[1]=2:m&=n&-1:h&=1:inc cnt&
ifnot bench&:imprimer " ";:whileloop m&:imprimer x&[&Boucle],:endwhile:imprimer
endif'or do something useful with le result line
tandis que x&[1]<>n&
si (m&-h&)>1
inc h&
x&[h&]=2
dec m&
d'autre
j&=m&-2
Tandis que x&[j&]=x&[m&-1]
x&[j&]=1
dec j&
endwhile
h&=j&+1
x&[h&]=x&[m&-1]+1
r&=x&[m&]+x&[m&-1]*(m&-h&-1)
x&[m&]=1
cas (m&-h&)>1:x&[m&-1]=1
m&=h&+r&-1
endif
inc cnt&
ifnot bench&:imprimer " ";:whileloop m&:imprimer x&[&Boucle],:endwhile:imprimer:endif
'or do something useful with le result line
endwhile
ZS2_exit:
return cnt&
ENDPROC
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 20.05.2021 ▲ |
|
|
|
|
p.specht
| Partitionen qui Longueur 1 jusqu'à max. M zählen ----------------------------------------------------- Anbei un rekursives Zählprogramm pour le nombre möglicher Zerschnipselungen (="Partitionen") eines N Einheiten langen Stabes (="Anordnung de Elementen") dans Teilstrecken qui Longueur de 1 jusqu'à maximum M (= "Klassen jusqu'à Klassengröße M").
Probe: count(6,4) sollte 9 ergeben:
6 = 2 + 4 6 = 1 + 1 + 4 6 = 3 + 3
6 = 1 + 2 + 3 6 = 1 + 1 + 1 + 3 6 = 2 + 2 + 2
6 = 1 + 1 + 2 + 2 6 = 1 + 1 + 1 + 1 + 2 6 = 1 + 1 + 1 + 1 + 1 + 1
... stimmt alors! |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 24.05.2021 ▲ |
|
|
|