Italia
Fonte/ Codesnippets

Deque Doppelseitige Double Ended Include Queue Warteschlange

 

p.specht

Die Datenstruktur DEQue (Double Ended Queue, Warteschlange mit zwei Enden) wird per manche Algorithmen gebraucht, etwa die Melkman-Hüllensuche. Für circa 400 Elemente in der Schlange wird die hier implementierte Variante allerdings langsam. Aber immerhin kann man damit auch reale Warteschlangensysteme, etwa an Supermarktkassen, auf Effektivität untersuchen.
' DEQ.inc

Proc DEQHelp

    font 2:Cls:Print:"\n\n============================================================"
    Print "                        D E Q H e l p"
    Print "============================================================"
    Print "\n CLEAR q&[] ' natives XProfan ":Print " sz&  = SizeOf(q&[]) ' sz=5 bedeutet: 0,1,2,3,4 "
    Print " SetSize q&[],sizeof(q&[])+1 ' erweitert Array um 1 Stelle "
    Print " MakeIndexDEQ(q&[],n&) ":Print " MakeRevertIndexDEQ(q&[],n&) "
    Print " MakeConstDEQ(q&[],n&,wert&) ":Print "\n ShowDEQ q&[],nw&   ' Temporary NumWidth "
    Print "\n Wert&= PopBtm(q&[]) ' -999999999 = OutOfRange Error "
    Print " Wert&= PopTop(q&[]) ' or -999999999 ":Print " PutTop Wert&,q&[] "
    Print " PutBtm Wert&,q&[] ":Print "\n Wert&= CopyBtm(q&[]) "
    Print " Wert&= CopyTop(q&[]) ' -999999999 ":Print " Wert&= CopyFromDEQ(q&[],n&) "
    Print "\n LogVgl&=CmpInDEQ(q&[],n&,m&)' n=Pos1,m=Pos2: <1,'=0',>-1 "
    Print "\n NisM&= SwapInDEQ(q&[],n&,m&)' (N=M)=1, -999999999 "
    Print " Wert&= DelFromDEQ(q&[],n&) ":Print " DEQHelp ' diesen Text ausgeben":waitinput :endproc
    :proc MakeIndexDEQ :parameters q&[],n&:SetSize q&[],n&:q&[]=&index+1:endproc
    :proc MakeRevertIndexDEQ :parameters q&[],n&:SetSize q&[],n&:q&[]=n&-&index:endproc
    :proc MakeConstDEQ :parameters q&[],n&,wert&:SetSize q&[],n&:q&[]=Wert&:endproc
    :Proc PopBtm :parameters q&[]:var sz&=sizeof(q&[]):if sz&>0:var wert&=q&[0]
    q&[]=q&[&index+(&index<(sz&-1))]:setsize q&[],sizeof(q&[])-(sz&>0):return wert&
    else :return int(-999999999):endif :endproc
    :proc PopTop :parameters q&[]:declare wert&:var sz&=sizeof(q&[]):if sz&>0:wert&=q&[sz&-1]
    else :wert&=int(-999999999):endif :setsize q&[],sz&-(sz&>0):return wert&:endproc
    :Proc PutTop :parameters Wert&,q&[]:var sz&=sizeof(q&[]):inc sz&:setsize q&[],sz&:q&[sz&-1]=Wert&:endproc
    :Proc PutBtm :parameters Wert&,q&[]:declare tmp&[]:var sz&=sizeof(q&[]):inc sz&
    setsize q&[],sz&:tmp&[]=q&[]:q&[]=tmp&[&index-(&index>0)]:clear tmp&[]:q&[0]=Wert&:endproc
    :Proc CopyBtm :parameters q&[]:var sz&=sizeof(q&[]):if sz&>0:return q&[0]
    else :return int(-999999999):endif :endproc
    :proc CopyTop :parameters q&[]:declare wert&:var sz&=sizeof(q&[])

    if sz&>0:wert&=q&[sz&-1]:else :wert&=int(-999999999):endif :return wert&:endproc

        :proc ShowDEQ :parameters q&[],nw&:var tmp&=get("numwidth"):set("numwidth",nw&)
        var sz&=sizeof(q&[]):print tab(2);"n=";sz&;":  ";:whileloop 0,sz&-1:print q&[&Loop],
        endwhile :print:set("numwidth",tmp&):endproc
        :proc CopyFromDEQ :parameters q&[],n&:declare wert&:var sz&=sizeof(q&[])

        if (sz&>0) and (n&>=0) and (n&<sz&):wert&=q&[n&]:else :wert&=int(-999999999):endif :return wert&:endproc

            :Proc CmpInDEQ :parameters q&[],n&,m&
            var sz&=sizeof(q&[]):if (sz&>0) and (n&>=0) and (n&<sz&) and (m&>=0) and (m&<sz&)
            return int((q&[n&]<q&[m&])-(q&[n&]>q&[m&])):else :return int(-999999999):endif :Endproc
            :Proc SwapInDEQ :parameters q&[],n&,m&'Swaps two elements in Queue
            var sz&=sizeof(q&[]):if (sz&>0) and (n&>=0) and (n&<sz&) and (m&>=0) and (m&<sz&):var tmp&=q&[n&]
            q&[n&]=q&[m&]:q&[m&]=tmp&:return int(n&<>m&):else :return int(-999999999):endif :endproc
            :proc DelFromDEQ :parameters q&[],n&:var sz&=sizeof(q&[]) :declare wert&

            if (sz&>0) and (n&>0) and (n&<sz&):wert&=q&[n&]:q&[]=q&[&index+(&index>=n&)*(&index<(sz&-1))]

                dec sz&:setsize q&[],sz&:else :wert&=int(-999999999):endif :return wert&

            endproc

 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
13.08.2014  
 




p.specht

Und wie macht man das da oben nun zu einem Codeabschnitt ohne Smilies?
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.08.2014  
 




Paul
Glatz

7 kB
Hochgeladen:14.08.2014
Downloadcounter243
Download
 
14.08.2014  
 




p.specht

Ahhhhhhh, danke Paul!
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
14.08.2014  
 



Huhu,

ist das Thema besser hier  [...]  aufgehoben?


34 kB
Hochgeladen:15.08.2014
Downloadcounter188
Download
 
15.08.2014  
 




p.specht

Unter welchem Stichwort würde das jemand dort suchen, wenn er von Deque als Begriff nie gehört hat? Und wieso käme er dann auf die Idee, Schirm 17 oder so anzuklicken? Aber in Kopie spricht naturalmente nix dagegen.
Gruss
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
19.08.2014  
 



Das könntest Du meiner Meinung nach aber auch ganz anders sehen.

Wenn es unter Fonte liegt und jemand mit der Suchfunktion nach irgend einem dieser Worte sucht:

Include DeQue Double-ended Queue doppelseitige Warteschlange


dann wird dort stehen, dass es ein Thema unter "Quelltexte" dazu gibt und der Suchende wird damit erkennen, dass per ihn ein Quelltext-Fundstück bereitliegt.

Wiederum unter "XPSE" ist es danach weniger sinnvoll einsortiert auch weil es sich nicht um einen Quelltext speziell per XPSE handelt.

Und zudem: Dein Profilo  [...]  wird damit auch korrekt ausgefüllt denn dort gibt es die Rubrik "Quelltexte/ Codesnippets" und dort steht jetzt ja bei Dir eine 0 (Null) was ja so dann nicht stimmt.
 
20.08.2014  
 




p.specht

Also bitteschön... wo Du recht hast hast Du naturalmente recht... Gebe aber zu bedenken: Das Ding ist per die Praxis noch nicht leistungsfähig genug: Wegen der versuchsweise gewählten 'physischen Speicherverschiebung' ist es (z.B. per den Melkman-Algorithmus) leider viel zu langsam bei größeren Queue-Längen!
Ich hatte ja eigentlich gehofft, daß Microsoft das ohnehin irdenwie schon als API realisiert hat, allerdings fand ich bisher nur was in Dot.Net und Visual C#, und da kenne ich mich nun wirklich 'Nada' aus. Werde es demnächst mal mit Link-Listen versuchen...
Gruss
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Habs mal verschoben das Thema...

Mal zum Thema...  [...]  das bringe ich meinem Saugroboter bei damit er im Programm-X nicht komplett verstumpft?
 
21.08.2014  
 




p.specht

Danke. Geht wohl eher um Vorarbeiten zu einer Verschnittoptimierung, oder um Oberfächenspannungsberechnung (Wie verhalten sich geschäumte Materialien) oder um Voraussetzungen per Voronoi- oder Delauney-Algorithmen (Funkzellen-Optimierung) oder um Erzeugung von neuen Nicht-Standard-Elementen per Finite-Elemente-Methoden (FEM).
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Ich glaube zwar es zu verstehen aber mein Gefühl sagt mir auch das ich mich da ziemlich irren darf.
 
21.08.2014  
 




p.specht

Du darst !
P.S.: Andrew's Monotone Chain Algorithm kommt mit einem einfachen Stack aus. Sozusagen der halbe Melkman, und deshalb leichter zu verstehen...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
21.08.2014  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

15.136 Views

Untitledvor 0 min.
p.specht20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Wilfried Friebe17.11.2021
Di più...

Themeninformationen

Dieses Thema hat 3 subscriber:

p.specht (7x)
iF (4x)
Paul Glatz (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie