Kezdőoldal » Számítástechnika » Programozás » C#-ban hogy írjak olyan...

C#-ban hogy írjak olyan metódust, amely vissza adja egy n elemű lista összes kombinációját (úgy, hogy a paraméterben meg tudom adni, hogy hány ismétlődés lehet benne)?

Figyelt kérdés

tehát ha n = [1, 2, 3] akkor ha a paraméter 1 akkor a kombinációk

(1), (2), (3), (1 2), (1 3), (2 3), (1 2 3)

ha viszont a paraméter 2 ugyanennél az esetnél, akkor:

(1), (1 1), (2), (2 2), (3), (3 3), (1 2), (1 3), (2 3), (1 2 3), (1 1 2), (1 1 3), (1 2 2), (1 3 3), (2 2 3), (3 3 2)


ha ki szeretném hagyni a képletből az ismétlődést, akkor az alábbi kód szépen működik (ezt kéne felturbózni kicsit):


public static IEnumerable<IEnumerable<T>> DifferentCombinations<T>(this IEnumerable<T> elements, int k)

{

return k == 0 ? new[] { new T[0] } :

elements.SelectMany((e, i) =>

elements.Skip(i + 1).DifferentCombinations(k - 1).Select(c => (new[] { e }).Concat(c)));

}



2021. jan. 22. 18:09
 1/4 anonim ***** válasza:
100%

Ez egy sima backtracking mintapelda, csak tarolnod kell az elemek elofordulasanak a szamat is az aktualis kombinacional.

Gondold at nyelvtol fuggetlenul az algoritmust, milyen adatstrukturaban tartanad nyilvan az ismetlodeseket, implementald, aztan raersz utana gondolkozni, hogy LINQ-val (vagy minek hivjak ezt, nem ertek C#-hoz) megvalosithato-e es hogyan.

2021. jan. 22. 19:53
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
28%
Descartes szorzatnak nézz utána.
2021. jan. 23. 19:24
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
100%
Ez egyszerű backtracking, ahogy #1 írta.
2021. jan. 23. 20:04
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Köszönöm a válaszokat, nagyon hasznos volt. Igazából programozási oldalról itt a performanciával is van egy kis gond, valahogy úgy szeretném, hogy ezeket a kombinációkat letárolom előre, és amikor nekem realtime szükségem van ebből néhány darabra, akkor egy már feldolgozott halmazból szűröm le (mondjuk egy legenerált xml- vagy db alapján). De ha van erre valami jó ötlet szivesen fogadom.
2021. febr. 5. 14:57

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!