Español
Fuente/ Codesnippets

Partitionierungen al Ejemplo "Meterstab en Stücke hacken"

 

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 11
Computer: 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").
Título de la ventana "Teilungsmöglichkeiten zählen":Ventana de Estilo 24:cls
Imprimir "\n Dieses Programa zählt el möglichen Teilungen de N Elementen"
imprimir "\n para zulässige Teilungsgrößen de 1 a M Elementen.\n"
declarar n&,m&,count!
otra vez:
clear n&,m&,count!
imprimir "\n    Gesamtlänge N = ";:input n&
imprimir "\n Max. Teillänge M = ";:input m&
imprimir "\n Count ergibt ";format$("%g",Count_partitions(n&,m&));" mögliche Teilungen!\n"
waitinput:cls:goto "nochmal"

proc count_partitions :parámetros n&,m&

    if n&=0:volver 1

    elseif n&<0:volver 0

    elseif m&=0:volver 0

    más

        volver count_partitions(n&-m&,m&)+count_partitions(n&,m&-1)

    endif

ENDPROC


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 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
24.05.2021  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.949 Views

Untitledvor 0 min.
p.specht20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Wilfried Friebe17.11.2021
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (3x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie