<?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[Speicherproblem]]></title><description><![CDATA[<p>Hallo zusammmen,</p>
<p>ich habe hier eine &quot;Hashfunktion&quot;, bei der ich Kollisionen entdecken soll. Meine Vorgehensweise ist wie folgt:</p>
<p>Ich habe eine unordered_map. Der Key ist der Hash, der &quot;Value&quot; ein std::vector<a href="std::string" rel="nofollow">std::string</a>, der alle Strings speichert, die den Key als Hash haben.</p>
<p>Mittels</p>
<pre><code>std::string str(&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890&quot;);

  do {
    uint32_t hash_value = hash(str.c_str(), str.size());
    if(collisionCount.Add(hash_value, str)) {   
  }
  while(std::next_permutation(str.begin(), str.end()));
</code></pre>
<p>fülle ich meine unordered_map mit den Permutationen meines Alphabets.</p>
<p>Problem: Auf diese Art und Weise sind meine 4GB Ram innerhalb etwa einer Minute aufgebraucht. Klar, ich lege pro neuem Hash eine Liste an. Trotzdem wundert es mich, dass diese Herangehensweise so speicherhungrig ist....</p>
<p>Hat jemand ne Idee, wie man dieses Problem performanter angehen kann? Meine Idee ist ja wohl nicht umsetzbar. Ich finde etwa 11 Strings, die den gleichen Hash haben. Dann stürzt mein PC ab. Die Aufgabe fordert aber 40.000 solcher Strings zu finden....</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322509/speicherproblem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 03:21:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322509.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Dec 2013 15:11:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:11:41 GMT]]></title><description><![CDATA[<p>Hallo zusammmen,</p>
<p>ich habe hier eine &quot;Hashfunktion&quot;, bei der ich Kollisionen entdecken soll. Meine Vorgehensweise ist wie folgt:</p>
<p>Ich habe eine unordered_map. Der Key ist der Hash, der &quot;Value&quot; ein std::vector<a href="std::string" rel="nofollow">std::string</a>, der alle Strings speichert, die den Key als Hash haben.</p>
<p>Mittels</p>
<pre><code>std::string str(&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890&quot;);

  do {
    uint32_t hash_value = hash(str.c_str(), str.size());
    if(collisionCount.Add(hash_value, str)) {   
  }
  while(std::next_permutation(str.begin(), str.end()));
</code></pre>
<p>fülle ich meine unordered_map mit den Permutationen meines Alphabets.</p>
<p>Problem: Auf diese Art und Weise sind meine 4GB Ram innerhalb etwa einer Minute aufgebraucht. Klar, ich lege pro neuem Hash eine Liste an. Trotzdem wundert es mich, dass diese Herangehensweise so speicherhungrig ist....</p>
<p>Hat jemand ne Idee, wie man dieses Problem performanter angehen kann? Meine Idee ist ja wohl nicht umsetzbar. Ich finde etwa 11 Strings, die den gleichen Hash haben. Dann stürzt mein PC ab. Die Aufgabe fordert aber 40.000 solcher Strings zu finden....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373548</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:20:23 GMT]]></title><description><![CDATA[<p>Naja, überleg mal.</p>
<p>Dein String da ist 2 mal das deutsche ALphabet lang plus alle Ziffern: macht zusammen 62 Zeichen. Nach der Kombinatorik existieren dafür 62! (Fakultät) verschiedene Kombinationen. Das sind etwa 3.15 x 10<sup>85</sup> Werte !!!<br />
Das Universum hat nicht viel mehr Atome...<br />
Dass dein armer kleiner Rechner da ganz schnell den Löffel abgibt, sollte auch nicht mehr als logisch sein.</p>
<p>Wenn du unter Windows entwickelst, ohne entsprechende Vorkerhrungen getroffen zu haben, verabschiedet sich dein Programm schon bei 2GB RAM-Usage(Stichwort: Linkerflag EnableLargehardwareAddress oder so heist des)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373549</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:20:23 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:21:34 GMT]]></title><description><![CDATA[<p>Dieser Gedankengang ist mir klar. Ich hatte die Hoffnung, dass zuvor alle Strings gefunden werden. Dann bricht nämlich die Suche automatich ab. Außerdem wundert es mich, dass so schnell der Speicher voll ist.</p>
<p>Habt ihr ne Idee, wie ich an das Problem anders angehen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373550</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:32:52 GMT]]></title><description><![CDATA[<p>Was genau ist die Aufgabe? ALLE Permutationen finden?<br />
Und was meinst du &quot;wenn alle Strings gefunden werden&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373551</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:39:11 GMT]]></title><description><![CDATA[<p>Also, ich habe eine Funktion gegeben, die eine Art Hash erstellt. Die Aufgabe lautet, dass ich 40.000 Strings angeben soll, die auf denselben &quot;Hash&quot; abbilden.</p>
<p>Diese &quot;Hashfunktion&quot; ist natürlich nicht kollisionsresistent, weswegen ich sie in Anführungsstriche schreibe.</p>
<p>Meine jetzige Herangehensweise ist zu speicherhungrig.</p>
<p>Meine neue Idee: Mit der alten Methode schaue ich, welche 10 Strings auf denselben &quot;Hash&quot; abbilden (10 Strings bekomme ich hin. Danach läuft der Speicher voll). Deren Hash schaue ich mir an und untersuche anschließend die Permutationen auf diesen Hash. Dieser Hash kam beim ersten Test ja am häufigsten vor.</p>
<p>Die Implementierung dieser Idee läuft nun seit 3 Minuten. Bis jetzt habe ich 57 Kollisionen. Ich zweifel jedoch, ob ich damit auf 40.000 komme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Mein Alphabet habe ich verkürzt auf abcdefghijklmnopq.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373552</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherproblem on Tue, 24 Dec 2013 15:52:35 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Die Implementierung dieser Idee läuft nun seit 3 Minuten. Bis jetzt habe ich 57 Kollisionen. Ich zweifel jedoch, ob ich damit auf 40.000 komme <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
</blockquote>
<p>Manchmal hilft es, etwas zu überlegen. Ist die Funktionsweise der Hashfunktion bekannt?</p>
<p>Ich hätte jetzt mit einem String angesetzt und den zufällig verändert, bis wieder der gleiche Hash herauskommt (also 10 Edits, dann wieder von vorne probieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2373556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2373556</guid><dc:creator><![CDATA[thinker]]></dc:creator><pubDate>Tue, 24 Dec 2013 15:52:35 GMT</pubDate></item></channel></rss>