<?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 aus Vektoren - Kombinationen generieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe eine (quadratische) Matrix aus Vektoren. Für diese Matrix soll vom Benutzer die Größe (also das n der nxn-Matrix) vorgegeben werden sowie die maximale Vektoren-Länge minus 1 (nennen wir mal k).</p>
<p>Was ich jetzt bräuchte ist eine Funktion, die mir aus diesen Werten alle Kombinationsmöglichkeiten, die Matrix zu befüllen, generiert. Also etwa so:</p>
<pre><code>#include &lt;boost\numeric\ublas\matrix.hpp&gt;

using stack_matrix = boost::numeric::ublas::matrix &lt; std::vector&lt;int&gt; &gt; ;

std::vector&lt;stack_matrix&gt; generate_stack_matrices(size_t matrix_size, size_t max_stack_size)
{
	std::vector&lt;stack_matrix&gt; result;
	// Implementierung ...
	return result;
}

int main()
{
	auto matrices = generate_stack_matrices(3, 2);
	// Mach irgendwas damit
}
</code></pre>
<p>Hier sind die Werte n = 3 und k = 2. Also ist die Matrix eine 3x3 Matrix und die Vektoren haben maximal eine Länge von 2 + 1 = 3.</p>
<p>Für die Vektoren gilt zusätzlich, dass sie</p>
<ul>
<li>Entweder leer</li>
<li>Oder nur positive (mit 0) integer Werte enthalten, wobei der größte Wert höchstens gleich der Vektor-Länge ist</li>
<li>Und zusätzlich sortiert sind (im ersten Index die kleinste, im höchsten die größte Zahl steht)</li>
<li>Keine Duplikate enthalten</li>
</ul>
<p>Für ein k = 2 wären also gültige Vektoren:</p>
<pre><code>v1 = [] // Leer
v2 = [0, 1, 2] // Sortiert, maximale Länge ist k + 1, also 3
v3 = [0, 2] // Lücken sind zulässig
v4 = [2] // Auch zulässig
</code></pre>
<p>ungültige Vektoren wären dagegen:</p>
<pre><code>v1 = [3] // Wert ist größer als k
v2 = [2, 1] // Nicht (bzw. falsch) sortiert
v3 = [1, 1, 2] // Duplikate sind nicht erlaubt
v4 = [-1] // Negative Werte nicht erlaubt
v5 = [0, 1, 2, 3] // Vektor zu lang, maximale Länge ist 3
</code></pre>
<p>Was ich jetzt brauche, ist eine möglichst effiziente Implementierung die alle nur möglichen Matrizen für die Nutzer-Vorgaben generiert. Also alle Kombinationsmöglichkeiten für alle Vektoren die die oben genannten Bedingungen erfüllen.</p>
<p>Da das ziemlich kompliziert und (vermutlich) auch sehr rechenaufwendig wird, wollte ich hier mal um Tipps etc. fragen wie man das am besten angehen könnte. Und ob es da vielleicht schon (zumindest teilweise) fertige Sachen in der STL gibt die man verwenden könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333143/matrix-aus-vektoren-kombinationen-generieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 05:34:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333143.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Jun 2015 19:03:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrix aus Vektoren - Kombinationen generieren on Sun, 14 Jun 2015 19:04:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>angenommen ich habe eine (quadratische) Matrix aus Vektoren. Für diese Matrix soll vom Benutzer die Größe (also das n der nxn-Matrix) vorgegeben werden sowie die maximale Vektoren-Länge minus 1 (nennen wir mal k).</p>
<p>Was ich jetzt bräuchte ist eine Funktion, die mir aus diesen Werten alle Kombinationsmöglichkeiten, die Matrix zu befüllen, generiert. Also etwa so:</p>
<pre><code>#include &lt;boost\numeric\ublas\matrix.hpp&gt;

using stack_matrix = boost::numeric::ublas::matrix &lt; std::vector&lt;int&gt; &gt; ;

std::vector&lt;stack_matrix&gt; generate_stack_matrices(size_t matrix_size, size_t max_stack_size)
{
	std::vector&lt;stack_matrix&gt; result;
	// Implementierung ...
	return result;
}

int main()
{
	auto matrices = generate_stack_matrices(3, 2);
	// Mach irgendwas damit
}
</code></pre>
<p>Hier sind die Werte n = 3 und k = 2. Also ist die Matrix eine 3x3 Matrix und die Vektoren haben maximal eine Länge von 2 + 1 = 3.</p>
<p>Für die Vektoren gilt zusätzlich, dass sie</p>
<ul>
<li>Entweder leer</li>
<li>Oder nur positive (mit 0) integer Werte enthalten, wobei der größte Wert höchstens gleich der Vektor-Länge ist</li>
<li>Und zusätzlich sortiert sind (im ersten Index die kleinste, im höchsten die größte Zahl steht)</li>
<li>Keine Duplikate enthalten</li>
</ul>
<p>Für ein k = 2 wären also gültige Vektoren:</p>
<pre><code>v1 = [] // Leer
v2 = [0, 1, 2] // Sortiert, maximale Länge ist k + 1, also 3
v3 = [0, 2] // Lücken sind zulässig
v4 = [2] // Auch zulässig
</code></pre>
<p>ungültige Vektoren wären dagegen:</p>
<pre><code>v1 = [3] // Wert ist größer als k
v2 = [2, 1] // Nicht (bzw. falsch) sortiert
v3 = [1, 1, 2] // Duplikate sind nicht erlaubt
v4 = [-1] // Negative Werte nicht erlaubt
v5 = [0, 1, 2, 3] // Vektor zu lang, maximale Länge ist 3
</code></pre>
<p>Was ich jetzt brauche, ist eine möglichst effiziente Implementierung die alle nur möglichen Matrizen für die Nutzer-Vorgaben generiert. Also alle Kombinationsmöglichkeiten für alle Vektoren die die oben genannten Bedingungen erfüllen.</p>
<p>Da das ziemlich kompliziert und (vermutlich) auch sehr rechenaufwendig wird, wollte ich hier mal um Tipps etc. fragen wie man das am besten angehen könnte. Und ob es da vielleicht schon (zumindest teilweise) fertige Sachen in der STL gibt die man verwenden könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456718</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 14 Jun 2015 19:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix aus Vektoren - Kombinationen generieren on Sun, 14 Jun 2015 19:57:43 GMT]]></title><description><![CDATA[<p>Du bist doch jetzt schon eine ganze Weile beim Programmieren, irgendwie kann ich kaum glauben, dass du das nicht selber hin bekämst, wenn du es nur mal versuchen würdest. Die naheliegenden Lösungen sind doch recht einfach und dürften allesamt ziemlich nahe an der effizientesten Lösung (welche auch immer das sein mag) liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456726</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 14 Jun 2015 19:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix aus Vektoren - Kombinationen generieren on Sun, 14 Jun 2015 20:26:46 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du bist doch jetzt schon eine ganze Weile beim Programmieren, irgendwie kann ich kaum glauben, dass du das nicht selber hin bekämst, wenn du es nur mal versuchen würdest. Die naheliegenden Lösungen sind doch recht einfach und dürften allesamt ziemlich nahe an der effizientesten Lösung (welche auch immer das sein mag) liegen.</p>
</blockquote>
<p>Naja, ich bräuchte halt sowas wie std::next_combination, was es ja leider nicht gibt so wie es aussieht... Deswegen wollte ich mal fragen obs was ähnliches dafür gibt. Hinkriegen werd ich das schon, will aber halt vermeiden &quot;das Rad neu zu erfinden&quot; wenn es da schon was geeignetes in std/boost gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2456727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2456727</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 14 Jun 2015 20:26:46 GMT</pubDate></item></channel></rss>