<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Matrix spiegelnd füllen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mir mithilfe eines Arrays eine Matrix angelegt. Nun will ich die mit Werten befüllen. Dabei sollen aber die Werte gespiegelt eingetragen werden. Also (2,1) soll auch (1,2) mit dem selben Wert belegen.</p>
<pre><code class="language-cpp">void set(int x, int y, int val)
{
    if(x!=y)
    {
        array[x*N+y] = val; // N ist die Ausdehnung
        array[y*N+x] = val;
    }
    else
    {
        array[x*N+y] = val;
    }
}
</code></pre>
<p>Das ist aber Mordslangsam, wenn ich den zweiten Zugriff (y*N+x) weglasse ist es akzeptabel.<br />
Jemand eine Idee wieso?</p>
<p>Danke im Voraus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159970/matrix-spiegelnd-füllen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 03:46:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159970.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Sep 2006 14:30:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 14:30:11 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mir mithilfe eines Arrays eine Matrix angelegt. Nun will ich die mit Werten befüllen. Dabei sollen aber die Werte gespiegelt eingetragen werden. Also (2,1) soll auch (1,2) mit dem selben Wert belegen.</p>
<pre><code class="language-cpp">void set(int x, int y, int val)
{
    if(x!=y)
    {
        array[x*N+y] = val; // N ist die Ausdehnung
        array[y*N+x] = val;
    }
    else
    {
        array[x*N+y] = val;
    }
}
</code></pre>
<p>Das ist aber Mordslangsam, wenn ich den zweiten Zugriff (y*N+x) weglasse ist es akzeptabel.<br />
Jemand eine Idee wieso?</p>
<p>Danke im Voraus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141221</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Wed, 20 Sep 2006 14:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 14:37:05 GMT]]></title><description><![CDATA[<p><a href="https://www.google.de/search?&amp;q=branch%20prediction" rel="nofollow">Google: branch prediction</a>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141231</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 20 Sep 2006 14:37:05 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 14:52:09 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141246</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Wed, 20 Sep 2006 14:52:09 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 15:06:42 GMT]]></title><description><![CDATA[<p>Grob gesagt:<br />
Der Prozessor holt sich immer ein paar Befehler im Voraus.<br />
Bei einem Sprungbefehl (hier: if) teilen sich die Wege und er verfolgt den Pfad, der ihm am wahrscheinlichsten vorkommt.<br />
Ist dieser Tip falsch, so muß er auf den anderen umschwenken und das dauert dann.</p>
<p>Evtl. bist Du sogar schneller, wenn Du die Diagonalwerte doppelt schreibst.<br />
Das erspart die Sprungvorhersage. Das geht aber auch sicher anders besser...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141259</guid><dc:creator><![CDATA[stimpleton]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:06:42 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 15:11:37 GMT]]></title><description><![CDATA[<p>Ne das hab ich schon probiert. Ohne die if Abfrage ist es immernoch lahm.<br />
Liegts daran, dass ich die Werte mit ner for Schleife übergebe?</p>
<p>Wie könnte es denn anders gehen?<br />
get(2,5) muss einfach das gleiche ergeben wie get(5,2)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141265</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:11:37 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 15:14:24 GMT]]></title><description><![CDATA[<p>da es hier um des 'befüllen' geht, gehe ich mal von einem regulären zugriffsmuster (linear) aus. in diesem falle spiel die sprungvorhersage keine rolle. für große N wird allerdings array[y*N+x] weit auseinanderliegende adressen betreffen, und das ist ein problem, wenn der L1 (und ggf. L2) cache nicht groß genug ist, um das array zu enthalten. ein bisschen mehr müsste man hier schon über die aufrufende funktion wissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141269</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:14:24 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 15:20:16 GMT]]></title><description><![CDATA[<p>Hum, naja<br />
Habs einfach mal getestet mit N = 1024 und 4096 und short als Typ.<br />
Gibt ja schon einige MB, gut möglich das mein kleiner alter Prozi nicht genug Cash hat, aber wer hat das schon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Habe in 2 verschachtelten for Schleifen von 0 bis N-1 alle Werte zufällig befüllt. Das entspricht nicht dem Original Fall, aber ich wollt halt mal testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141274</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 15:22:12 GMT]]></title><description><![CDATA[<p>Egal, ich teste einfach, welche Zahl groesser ist und fülle dann nur ein Feld.<br />
Danke trotzdem</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141277</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Wed, 20 Sep 2006 15:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 16:27:13 GMT]]></title><description><![CDATA[<p>langsam ist so furchtbar relativ, was genau ist bei dir langsam (bitte in Zahlen mit Einheiten)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141331</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Wed, 20 Sep 2006 16:27:13 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Wed, 20 Sep 2006 17:02:41 GMT]]></title><description><![CDATA[<p>Ach so... &quot;wenn ich den zweiten Zugriff&quot;. Hab ich komplett dran vorbei gelesen, dachte du meinst den else-Zweig.</p>
<p>Vielleicht wär</p>
<pre><code class="language-cpp">void set( int x, int y, int val )
{
  if (x &lt; y) {
    array[((x*(x+1))/2)+y] = val;
  } else {
    array[((y*(y+1))/2)+x] = val;
  }
}
</code></pre>
<p>was für dich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141354</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 20 Sep 2006 17:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Thu, 21 Sep 2006 06:06:10 GMT]]></title><description><![CDATA[<p>Du testest die Release-Version nehme ich an? (Könnte ja sein...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141530</guid><dc:creator><![CDATA[stimpleton]]></dc:creator><pubDate>Thu, 21 Sep 2006 06:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Thu, 21 Sep 2006 08:30:27 GMT]]></title><description><![CDATA[<p>Morgen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ja, teste die Release Version.</p>
<p>Ja, langsam ist relativ, und zwar so:</p>
<pre><code class="language-cpp">for( int i = 0; i &lt; N; ++i )
{
    for( int j = 0; j &lt; N; ++j )
    {
        set( i, j, Zufallszahl );
    }
}
</code></pre>
<p>Mit</p>
<pre><code class="language-cpp">void set( int x, int y, int val )
{
    array[y*N+x] = val;
}
</code></pre>
<p>ist es relativ langsamer als mit</p>
<pre><code class="language-cpp">void set( int x, int y, int val )
{
    array[x*N+y] = val;
}
</code></pre>
<p>und zwar mehr als 2x (keine Einheit :p)</p>
<p>finix, zu dem Schluss bin ich dann auch gekommen.<br />
Aber deine Berechnung des Array Index kapier ich nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Machs jetzt so:</p>
<pre><code class="language-cpp">for( int i = 0; i &lt; N; ++i )
{
    for( int j = 0; j &lt;= i; ++j )
    {
        set( i, j, Zufallszahl );
    }
}
</code></pre>
<pre><code class="language-cpp">void set( int x, int y, int val )
{
    array[x*N+y] = val;
}
int get( int x, int y )
{
    if( x &lt;= y )
        return array[x*N+y];
    else
        return array[y*N+x];
}
</code></pre>
<p>Der Rest der Matrix liegt brach, aber ich glaub ist einfacher so, als eine halbe zu implementieren.</p>
<p>Danke euch allen<br />
und tschüss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141621</guid><dc:creator><![CDATA[Eski Moe]]></dc:creator><pubDate>Thu, 21 Sep 2006 08:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix spiegelnd füllen on Thu, 21 Sep 2006 10:21:44 GMT]]></title><description><![CDATA[<p>Eski Moe schrieb:</p>
<blockquote>
<p>finix, zu dem Schluss bin ich dann auch gekommen.<br />
Aber deine Berechnung des Array Index kapier ich nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Du kannst deine Spiegelmatrix einfach mit Hilfe einer Dreiecksmatrix implementieren.</p>
<p>Statt</p>
<pre><code>{ v11, v12, v13,
  v21, v22, v23,
  v31, v32, v33 }
</code></pre>
<p>speicherst du nur</p>
<pre><code>{ v11,
  v21, v22,
  v31, v32, v33 }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1141684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141684</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 21 Sep 2006 10:21:44 GMT</pubDate></item></channel></rss>