Français
Source/ Codesnippets

Partitionierungen am Beispiel "Meterstab dans Stücke hacken"

 

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 11
Computer: 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").
Titre de la fenêtre "Teilungsmöglichkeiten zählen":Fenêtre Style 24:cls
Imprimer "\n cet Programme zählt qui möglichen Teilungen de N Elementen"
imprimer "\n pour zulässige Teilungsgrößen de 1 jusqu'à M Elementen.\n"
declare n&,m&,count!
nochmal:
clear n&,m&,count!
imprimer "\n    Gesamtlänge N = ";:input n&
imprimer "\n Max. Teillänge M = ";:input m&
imprimer "\n Count ergibt ";format$("%g",Count_partitions(n&,m&));" mögliche Teilungen!\n"
waitinput:cls:goto "nochmal"

proc count_partitions :parameters n&,m&

    si n&=0:return 1

    elseif n&<0:return 0

    elseif m&=0:return 0

    d'autre

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

    endif

ENDPROC


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



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

1.952 Views

Untitledvor 0 min.
p.specht20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Wilfried Friebe17.11.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (3x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie