|
|
|
|
Quelle chap10.html
Sprache: HTML
|
|
| products/Sources/formale Sprachen/GAP/pkg/datastructures/doc/chap10.html |
 |
<?xml version= "1.0" encoding= "UTF-8"?>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en">
< head>
< title>GAP (datastructures) - Chapter 10: Ordered Set Datastructures</ title>
< meta http-equiv= "content-type" content= "text/html; charset=UTF-8" />
< meta name= "generator" content= "GAPDoc2HTML" />
< link rel= "stylesheet" type= "text/css" href= "manual.css" />
< script src= "manual.js" type= "text/javascript"></ script>
< script type= "text/javascript">overwriteStyle();</ script>
</ head>
< body class= "chap10" onload= "jscontent()">
< div class= "chlinktop">< span class= "chlink1">Goto Chapter: </ span>< a href= "chap0.html">Top</ a> < a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chap12.html">12</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap9.html">[Previous Chapter]</a> <a href="chap11.html">[Next Chapter]</a> </div>
<p id="mathjaxlink" class="pcenter"><a href="chap10_mj.html">[MathJax on]</a></p>
<p><a id="X8134174379D8CD1E" name="X8134174379D8CD1E"></a></p>
<div class="ChapSects"><a href="chap10.html#X8134174379D8CD1E">10 <span class="Heading">Ordered Set Datastructures</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10.html#X86A9B6F87E619FFF">10.1 <span class="Heading">Usage</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10.html#X7C5F33687C53BEF0">10.2 <span class="Heading">API</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X829BF6468120FCF4">10.2-1 IsOrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X83DF983D824ADA52">10.2-2 IsStandardOrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7C0A0ACD833B09E8">10.2-3 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X784F06667B9CAE61">10.2-4 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X82EBF9967A1BC1F4">10.2-5 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7B3E75657C8758DA">10.2-6 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7EE9AD66864EFD95">10.2-7 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X84341B117B22B200">10.2-8 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X87CC3ADD8273BDDC">10.2-9 OrderedSetDS</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X785F29D484E84A9B">10.2-10 AddSet</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X79CA0BD27822C1FB">10.2-11 RemoveSet</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7DD7225D7A6F92C6"><code>10.2-12 \in</code></a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X85F4EDA0841AADFD">10.2-13 LessFunction</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7B2E5BB28435AE50">10.2-14 Size</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X83A682A08318DBA0">10.2-15 IteratorSorted</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10.html#X8373B442852AB64B">10.3 <span class="Heading">Default methods</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X805D48307D3FBC57">10.3-1 Iterator</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7BA094DE791ADBC1">10.3-2 AsSSortedList</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7CEA1C9283A69F26">10.3-3 AsSortedList</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X84A6178D7F4FEF35">10.3-4 AsList</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7B0571977A8480EA">10.3-5 EnumeratorSorted</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X786CD5B57A439204">10.3-6 Enumerator</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7DD174FE79F86562">10.3-7 IsEmpty</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X78B39A307B3B8879">10.3-8 Length</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X81CAD5FC819FD0AA">10.3-9 Position</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7B74B4107A33E68A">10.3-10 PositionSortedOp</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap10.html#X7FDCE67179997482">10.3-11 PositionSortedOp</a></span>
</div></div>
</div>
<h3>10 <span class="Heading">Ordered Set Datastructures</span></h3>
<p>In this chapter we deal with datastructures designed to represent sets of objects which have an intrinsic ordering. Such datastructures should support fast (possibly amortised) <span class="Math">O(\log n)</span> addition, deletion and membership test operations and allow efficient iteration through all the objects in the datastructure in the order determined by the given comparison function. Since they represent a set, adding an object equal to one already present has no effect.</p>
<p>We refer to these as ordered set <em>datastructure</em> because the differ from the <strong class="pkg">GAP</strong> notion of a set in a number of ways:</p>
<ul>
<li><p>They all lie in a common family <code class="code">OrderedSetDSFamily</code> and pay no attention to the families of the objects stored in them.</p>
</li>
<li><p>Equality of these structures is by identity, not equality of the represented set</p>
</li>
<li><p>The ordering of the objects in the set does not have to be default <strong class="pkg">GAP</strong> ordering "less than", but is determined by the attribute <code class="func">LessFunction</code> (<a href="chap10.html#X85F4EDA0841AADFD"><span class="RefLink">10.2-13</span></a>)</p>
</li>
</ul>
<p>Three implementations of ordered set data structures are currently included: skiplists, binary search trees and (as a specialisation of binary search trees) AVL trees. AVL trees seem to be the fastest in general, and memory usage is similar. More details to come</p>
<p><a id="X86A9B6F87E619FFF" name="X86A9B6F87E619FFF"></a></p>
<h4>10.1 <span class="Heading">Usage</span></h4>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := OrderedSetDS(IsSkipListRep, {x,y} -> String(x) < String(y));</span>
<skiplist 0 entries>
<span class="GAPprompt">gap></span> <span class="GAPinput">Addset(s, 1);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSet(s, 2);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSet(s, 10);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddSet(s, (1,2,3));</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">RemoveSet(s, (1,2,3));</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">AsListSorted(s);</span>
[ 1, 10, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">b := OrderedSetDS(IsBinarySearchTreeRep, Primes);</span>
<bst size 168>
<span class="GAPprompt">gap></span> <span class="GAPinput">91 in b;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">97 in b;</span>
true
</pre></div>
<p><a id="X7C5F33687C53BEF0" name="X7C5F33687C53BEF0"></a></p>
<h4>10.2 <span class="Heading">API</span></h4>
<p>Every implementation of an ordered set datastructure must follow the API set out below</p>
<p><a id="X829BF6468120FCF4" name="X829BF6468120FCF4"></a></p>
<h5>10.2-1 IsOrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IsOrderedSetDS</code>( <var class="Arg">arg</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code></p>
<p>Category of ordered set.</p>
<p><a id="X83DF983D824ADA52" name="X83DF983D824ADA52"></a></p>
<h5>10.2-2 IsStandardOrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IsStandardOrderedSetDS</code>( <var class="Arg">arg</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code></p>
<p>Subcategory of ordered sets where the ordering is <strong class="pkg">GAP</strong>'s default <code class="code"><</code></p>
<p><a id="X7C0A0ACD833B09E8" name="X7C0A0ACD833B09E8"></a></p>
<h5>10.2-3 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">filter</var>[, <var class="Arg">lessThan</var>[, <var class="Arg">initialEntries</var>[, <var class="Arg">randomSource</var>]]] )</td><td class="tdright">( constructor )</td></tr></table></div>
<p>Returns: an ordered set datastructure</p>
<p>The family that contains all ordered set datastructures. Constructors for ordered sets</p>
<p>The argument <var class="Arg">filter</var> is a filter that the resulting ordered set object will have.</p>
<p>The optional argument <var class="Arg">lessThan</var> must be a binary function that returns <code class="keyw">true</code> if its first argument is less than its second argument, and <code class="keyw">false</code> otherwise. The default <var class="Arg">lessThan</var> is <strong class="pkg">GAP</strong>'s built in <code class="code"><</code>.</p>
<p>The optional argument <var class="Arg"> initialEntries</var> gives a collection of elements that the ordered set is initialised with, and defaults to the empty set.</p>
<p>The optional argument <var class="Arg">randomSource</var> is useful in a number of possible implementations that use randomised methods to achieve good amortised complexity with high probability and simple data structures. It defaults to the global Mersenne twister.</p>
<p><a id="X784F06667B9CAE61" name="X784F06667B9CAE61"></a></p>
<h5>10.2-4 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var>, <var class="Arg">arg3</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X82EBF9967A1BC1F4" name="X82EBF9967A1BC1F4"></a></p>
<h5>10.2-5 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var>, <var class="Arg">arg3</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X7B3E75657C8758DA" name="X7B3E75657C8758DA"></a></p>
<h5>10.2-6 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var>, <var class="Arg">arg3</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X7EE9AD66864EFD95" name="X7EE9AD66864EFD95"></a></p>
<h5>10.2-7 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X84341B117B22B200" name="X84341B117B22B200"></a></p>
<h5>10.2-8 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X87CC3ADD8273BDDC" name="X87CC3ADD8273BDDC"></a></p>
<h5>10.2-9 OrderedSetDS</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedSetDS</code>( <var class="Arg">arg</var> )</td><td class="tdright">( constructor )</td></tr></table></div>
<p><a id="X785F29D484E84A9B" name="X785F29D484E84A9B"></a></p>
<h5>10.2-10 AddSet</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; AddSet</code>( <var class="Arg">set</var>, <var class="Arg">object</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Other constructors cover making an ordered set from another ordered set, from an iterator, from a function and an iterator, or from a function, an iterator and a random source.</p>
<p>Adds <var class="Arg">object</var> to <var class="Arg">set</var>. Does nothing if <var class="Arg">object</var><code class="code">in</code><var class="Arg">set</var>set.</p>
<p><a id="X79CA0BD27822C1FB" name="X79CA0BD27822C1FB"></a></p>
<h5>10.2-11 RemoveSet</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; RemoveSet</code>( <var class="Arg">set</var>, <var class="Arg">object</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="keyw">0</code> or <code class="keyw">1</code></p>
<p>Removes <var class="Arg">object</var> from <var class="Arg">set</var> if present, and returns the number of copies of <var class="Arg">object</var> that were in <var class="Arg">set</var>, that is <code class="keyw">0</code> or <code class="keyw">1</code>. This for consistency with multisets.</p>
<p><a id="X7DD7225D7A6F92C6" name="X7DD7225D7A6F92C6"></a></p>
<h5><code>10.2-12 \in</code></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; \in</code>( <var class="Arg">object</var>, <var class="Arg">set</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>All objects in IsOrderedSetDS must implement \in, which returns <var class="Arg">true</var> if <var class="Arg">object</var> is present in <var class="Arg">set</var> and <code class="keyw">false</code> otherwise.</p>
<p><a id="X85F4EDA0841AADFD" name="X85F4EDA0841AADFD"></a></p>
<h5>10.2-13 LessFunction</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; LessFunction</code>( <var class="Arg">set</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>The binary function to perform the comparison for elements of the set.</p>
<p><a id="X7B2E5BB28435AE50" name="X7B2E5BB28435AE50"></a></p>
<h5>10.2-14 Size</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Size</code>( <var class="Arg">set</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>The number of objects in the set</p>
<p><a id="X83A682A08318DBA0" name="X83A682A08318DBA0"></a></p>
<h5>10.2-15 IteratorSorted</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IteratorSorted</code>( <var class="Arg">set</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: iterator</p>
<p>Returns an iterator of <var class="Arg">set</var> that can be used to iterate through the elements of <var class="Arg">set</var> in the order imposed by <code class="func">LessFunction</code> (<a href="chap10.html#X85F4EDA0841AADFD"><span class="RefLink">10.2-13</span></a>).</p>
<p><a id="X8373B442852AB64B" name="X8373B442852AB64B"></a></p>
<h4>10.3 <span class="Heading">Default methods</span></h4>
<p>Default methods based on <code class="func">IteratorSorted</code> (<a href="/home/runner/gap/doc/ref/chap30.html#X8688C20B828FC129"><span class="RefLink">Reference: IteratorSorted</span></a>) are installed for the following operations and attributes, but can be overridden for data structures that support better algorithms.</p>
<p><a id="X805D48307D3FBC57" name="X805D48307D3FBC57"></a></p>
<h5>10.3-1 Iterator</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Iterator</code>( <var class="Arg">arg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><a id="X7BA094DE791ADBC1" name="X7BA094DE791ADBC1"></a></p>
<h5>10.3-2 AsSSortedList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; AsSSortedList</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X7CEA1C9283A69F26" name="X7CEA1C9283A69F26"></a></p>
<h5>10.3-3 AsSortedList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; AsSortedList</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X84A6178D7F4FEF35" name="X84A6178D7F4FEF35"></a></p>
<h5>10.3-4 AsList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; AsList</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X7B0571977A8480EA" name="X7B0571977A8480EA"></a></p>
<h5>10.3-5 EnumeratorSorted</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; EnumeratorSorted</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X786CD5B57A439204" name="X786CD5B57A439204"></a></p>
<h5>10.3-6 Enumerator</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Enumerator</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X7DD174FE79F86562" name="X7DD174FE79F86562"></a></p>
<h5>10.3-7 IsEmpty</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IsEmpty</code>( <var class="Arg">arg</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code></p>
<p><a id="X78B39A307B3B8879" name="X78B39A307B3B8879"></a></p>
<h5>10.3-8 Length</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Length</code>( <var class="Arg">arg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><a id="X81CAD5FC819FD0AA" name="X81CAD5FC819FD0AA"></a></p>
<h5>10.3-9 Position</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Position</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var>, <var class="Arg">arg3</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><a id="X7B74B4107A33E68A" name="X7B74B4107A33E68A"></a></p>
<h5>10.3-10 PositionSortedOp</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PositionSortedOp</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><a id="X7FDCE67179997482" name="X7FDCE67179997482"></a></p>
<h5>10.3-11 PositionSortedOp</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PositionSortedOp</code>( <var class="Arg">arg1</var>, <var class="Arg">arg2</var>, <var class="Arg">arg3</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a> <a href="chap0.html#contents">[Contents]</a> <a href="chap9.html">[Previous Chapter]</a> <a href="chap11.html">[Next Chapter]</a> </div>
<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a> <a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chap12.html">12</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>
¤ Dauer der Verarbeitung: 0.10 Sekunden
¤
*© Formatika GbR, Deutschland
|
|
2026-11-04
|
|
|
|
|
Neuigkeiten |
| Aktuelles |
| Motto des Tages |
|
Open Source Software |
|
|
|
Jenseits des Üblichen ....
|
|
Besucherstatistik |
|
|
| Statistik |
| #Sources=1104857 |
| #Domains=439064 |
|
|