| |
|
|
p.specht
| Die Datenstruktur DEQue (Double Ended Queue, Warteschlange mit zwei Enden) wird für manche Algorithmen gebraucht, etwa die Melkman-Hüllensuche. Für über 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 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 14.08.2014 ▲ |
|
|
|
|
Paul Glatz |
|
|
| |
|
|
|
p.specht
| |
|
| XProfan 11Computer: 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?
|
|
|
| |
|
|
|
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 natürlich nix dagegen. Gruss |
|
|
| XProfan 11Computer: 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 Quelltexte 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 für ihn ein Quelltext-Fundstück bereitliegt.
Wiederum unter "XPSE" ist es danach weniger sinnvoll einsortiert auch weil es sich nicht um einen Quelltext speziell für XPSE handelt.
Und zudem: Dein Profil [...] 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. |
|
|
| |
|
|
|
p.specht
| Also bitteschön... wo Du recht hast hast Du natürlich recht... Gebe aber zu bedenken: Das Ding ist für die Praxis noch nicht leistungsfähig genug: Wegen der versuchsweise gewählten 'physischen Speicherverschiebung' ist es (z.B. für 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? |
|
|
| |
|
|
|
p.specht
| Danke. Geht wohl eher um Vorarbeiten zu einer Verschnittoptimierung, oder um Oberfächenspannungsberechnung (Wie verhalten sich geschäumte Materialien) oder um Voraussetzungen für Voronoi- oder Delauney-Algorithmen (Funkzellen-Optimierung) oder um Erzeugung von neuen Nicht-Standard-Elementen für 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. |
|
|
| |
|
|
|
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 ▲ |
|
|
|