| |
|
|
p.specht
| In welche y wieviele verschiedene "Zerhackungs-Anordnungen" puede ser una Meßstab de z.B. 70 cm Longitud hacken, vorausgesetzt el Schnitte son äusserst dünn (Laser?) y todos Einzelteile necesario 1 cm oder una Vielfaches su lang ser? Dabei se el physische Anordnung el Einzelstücke egal ser, zusammen necesario ellos sólo 70 cm ergeben.
El Cuestión taucht u.a. en el Wellenphysik, en el Technischen Chemie, aber auch beim Packen de Standardprodukten en vorggegebene Schachteln en. El Herren Zoghbi y Stojmenovic konnten dazu 1998 Ihren ZS1-Algorithmus vorstellen, el immerhin viermal más rápido como todos reciente war. In reinem XProfan braucht uno natürlich algo länger como en Maschinencode, aber a Demo-Zwecken reicht el nachstehende Machwerk durchaus. El Antwort: 70 podrá, a 4.087.967 Arten en Stücke gehackt plus una vez bastante gelassen voluntad.
Quellenangabe: Artikel de "Fast Algorithms for Generating Integer Partitions. International Journal of Computer Mathematics, 70, 1998"
Título de la ventana "Algorithm ZS1: Erzeugung uno vollständigen, "+\
"revers-geordneten Partitionierung sin Wiederholung"
'Q: Antoine Zoghbi, Ivan Stojmenovic: Fast Algorithms for Generating Integer Partitions
' published en: "International Journal of Computer Mathematics, 70, 1998, 319-332."
'S: [url]https://citeseerx.es.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.Pájaro carpintero, Vienna/Austria
'No Warranty whatsoever! Ohne jedwede Gewähr! Rechtslage ungeprüft.
Ventana de Estilo 24:Ventana 0,0-%maxx,%maxy:font 2:randomize
declarar z$,z&,tm&,cnt&,bench&: Rept:
Cls:Imprimir "\n ZAHL, el partitioniert voluntad se (0: Ende; Minuszahl: Nur Zeitmessung)? : ";
z$="":input z$:bench&=0:caso val(z$)<0:bench&=1:z&=rnd(30):caso z$>"":z&=abs(val(z$))
if z&=0:imprimir "\n Ergebnis: Leere Menge.\n\n Programa se final! ":beep:waitinput 4000:FIN:endif
caso bench&:imprimir "\n Messung se ejecuta ..."
tm&=&GetTickCount
cnt& = Algorithm_ZS1(z&,bench&)
imprimir "\n ";cnt&;" Partitionen producido."
if bench& : tm&=&GetTickCount-tm&
imprimir "\n Laufzeit para n = ";z&;": ";tm&;" [ms] o. ";tm&/1000;" [s] o. ";tm&/60000;" [min]"
endif
sound 2000,60
waitinput
Goto "Rept"
FIN
Proc Algorithm_ZS1 :parámetros n&,bench&
declarar x&[n&],i&,m&,h&,r&,t&,cnt&
whileloop n&
x&[&bucle]=1
endwhile
x&[1]=n&
m&=1:h&=1
cnt&=1
casenot bench&:imprimir "\n>>> ";x&[1]'show or do something useful
mientras que x&[1]<>1
if x&[h&]=2'Easy caso, applies often
' h is the index of the last part of partition which is greater than 1
' m is the number of parts.
inc m&:x&[h&]=1:dec h&
más
r&=x&[h&]-1
t&=m&-h&+1
x&[h&]=r&
mientras que t&>=r&
inc h&
x&[h&]=r&
t&=t&-r&
endwhile
if t&=0
m&=h&
más
m&=h&+1
if t&>1
inc h&:x&[h&]=t&
endif
endif
endif
inc cnt&
ifnot bench&:imprimir " ";:whileloop m&:imprimir x&[&Loop],:endwhile:imprimir:endif
'or do something useful with the resultado line
endwhile
volver cnt&
ENDPROC
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 20.05.2021 ▲ |
|
|
|
|
p.specht
| Hier el AUFSTEIGENDE Versión el Partitionierungsmethode: Der ZS2-Algorithmus, nachgeliefert como Ergänzung para obigen Contribución.
Título de la ventana "Algorithm ZS2: Erzeugung uno vollständigen, "+\
"AUFSTEIGEND geordneten Partitionierung sin Wiederholung"
'Q: Antoine Zoghbi, Ivan Stojmenovic: Fast Algorithms for Generating Integer Partitions
' published en: "International Journal of Computer Mathematics, 70, 1998, 319-332."
'S: https://citeseerx.es.psu.edu/viewdoc/download?doi=10.1.1.42.1287&rep=rep1&type=pdf
'T: Translation to XProfan 11.2a 2016-07ff by P.Pájaro carpintero, Vienna/Austria
'No Warranty whatsoever! Ohne 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>>> ...
Ventana de Estilo 24:Ventana 0,0-%maxx,%maxy:randomize:font 2
declarar z$,z&,tm&,cnt&,bench&: Rept:
Cls:Imprimir "\n ZAHL, welche partitioniert voluntad se (0: Ende; Minuszahl: Nur Zeitmessung)? : ";
z$="":input z$:bench&=0:caso val(z$)<0:bench&=1:z&=rnd(30):caso z$>"":z&=abs(val(z$))
if z&=0:imprimir "\n Ergebnis: Leere Menge.\n\n Programa se final! ":beep:waitinput 4000:FIN:endif
caso bench&:imprimir "\n Messung se ejecuta ..."
tm&=&GetTickCount
cnt& = Algorithm_ZS2(z&,bench&)
tm&=&GetTickCount-tm&
imprimir "\n ";cnt&;" Partitionen producido."
if bench&:imprimir "\n Laufzeit para n = ";z&;": ";tm&;" [ms] o. ";tm&/1000;" [s] o. ";tm&/60000;" [min]"
endif :sound 2000,60:waitinput
Goto "Rept"
FIN
Proc Algorithm_ZS2 :parámetros n&,bench&
declarar x&[n&],i&,m&,h&,r&,j&,cnt&
if n&=1:imprimir " ";1 :cnt&=1:goto "ZS2_exit":endif
:whileloop n&:x&[&bucle]=1:endwhile
cnt&=1
ifnot bench&:imprimir "\n>>> ";:whileloop n&:imprimir x&[&Loop],:endwhile:imprimir
endif'or do something useful with the resultado line
x&[0]=-1:x&[1]=2:m&=n&-1:h&=1:inc cnt&
ifnot bench&:imprimir " ";:whileloop m&:imprimir x&[&Loop],:endwhile:imprimir
endif'or do something useful with the resultado line
mientras que x&[1]<>n&
if (m&-h&)>1
inc h&
x&[h&]=2
dec m&
más
j&=m&-2
Mientras 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
caso (m&-h&)>1:x&[m&-1]=1
m&=h&+r&-1
endif
inc cnt&
ifnot bench&:imprimir " ";:whileloop m&:imprimir x&[&Loop],:endwhile:imprimir:endif
'or do something useful with the resultado line
endwhile
ZS2_exit:
volver 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 el Longitud 1 a max. M zählen ----------------------------------------------------- Anbei una rekursives Zählprogramm para el número möglicher Zerschnipselungen (="Partitionen") uno N Einheiten langen Stabes (="Anordnung de Elementen") en Teilstrecken el Longitud de 1 a máximo M (= "Klassen a Klassengröße M").
Probe: count(6,4) debería 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 also! |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 24.05.2021 ▲ |
|
|
|