This commit is contained in:
Lendaia Mirai
2025-11-08 16:36:51 +01:00
parent a4592d8349
commit 06af9a6078
2 changed files with 133 additions and 68 deletions

View File

@@ -1,4 +1,69 @@
namespace OE.ALGA.Optimalizalas
using System;
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
namespace OE.ALGA.Optimalizalas
{
// 8. heti labor feladat - Tesztek: 08_DinamikusProgramozasTesztek.cs
public class DinamikusHatizsakPakolas
{
HatizsakProblema problema;
int[,] tablazat;
int lepesszam;
public int LepesSzam
{
get { return lepesszam; }
}
public DinamikusHatizsakPakolas(HatizsakProblema problema)
{
this.problema = problema;
}
public int[,] TablazatFeltoltes()
{
int[,] F = new int[problema.N + 1, problema.Wmax + 1];
for (int i = 0; i < problema.N; i++)
{
for (int j = 0; j < problema.Wmax; j++)
{
if (i == 0 || j == 0)
{
F[i, j] = 0;
}
else if (j < problema.W[i])
{
F[i, j] = F[i - 1, j];
}
else
{
int[] tomb = new int[] { (F[i - 1, j]), (F[i - 1, j - problema.W[i]] + Convert.ToInt32(problema.P[i])) };
F[i, j] = tomb.Max();
}
lepesszam++;
}
}
return F;
}
public float OptimalisErtek()
{
tablazat = TablazatFeltoltes();
return tablazat[problema.N, problema.Wmax];
}
public bool[] OptimalisMegoldas()
{
float optimalisertek = OptimalisErtek();
int t = problema.N;
int h = problema.Wmax;
bool[] optimails = new bool[problema.N];
while (t > 0 && h > 0)
{
if (tablazat[t, h] != tablazat[t - 1, h])
{
optimails[t] = true;
h = h - problema.W[t];
}
t--;
}
return optimails;
}
}
}

View File

@@ -1,67 +1,67 @@
//using NUnit.Framework;
//using System;
//using OE.ALGA.Optimalizalas;
using NUnit.Framework;
using System;
using OE.ALGA.Optimalizalas;
//namespace OE.ALGA.Tesztek.Optimalizalas
//{
// [TestFixture(Category = "Optimalizalas", TestName = "08 - Dinamikus Programozás Tesztek")]
// public class DinamikusProgramozasTesztek
// {
// [TestCase]
// public void UresTeszt()
// {
// HatizsakProblema problema = new HatizsakProblema(0, 0, [], []);
// DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
// Assert.Multiple(() =>
// {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(0));
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(Array.Empty<bool>()));
// Assert.That(opt.LepesSzam, Is.EqualTo(0));
// });
// }
// [TestCase]
// public void JegyzetbenLevoPeldaErtekTeszt()
// {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
// Assert.Multiple(() =>
// {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(24));
// });
// }
// [TestCase]
// public void JegyzetbenLevoPeldaMegoldasTeszt()
// {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
// DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
// Assert.Multiple(() =>
// {
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas));
// Assert.That(opt.LepesSzam, Is.EqualTo(24));
// });
// }
// [TestCase]
// public void NagyPeldaMegoldasErtekTeszt()
// {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
// Assert.Multiple(() =>
// {
// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
// Assert.That(opt.LepesSzam, Is.EqualTo(1700));
// });
// }
// [TestCase]
// public void NagyPeldaMegoldasTeszt()
// {
// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
// DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
// Assert.Multiple(() =>
// {
// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas));
// Assert.That(opt.LepesSzam, Is.EqualTo(1700));
// });
// }
// }
//}
namespace OE.ALGA.Tesztek.Optimalizalas
{
[TestFixture(Category = "Optimalizalas", TestName = "08 - Dinamikus Programozás Tesztek")]
public class DinamikusProgramozasTesztek
{
[TestCase]
public void UresTeszt()
{
HatizsakProblema problema = new HatizsakProblema(0, 0, [], []);
DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
Assert.Multiple(() =>
{
Assert.That(opt.OptimalisErtek(), Is.EqualTo(0));
Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(Array.Empty<bool>()));
Assert.That(opt.LepesSzam, Is.EqualTo(0));
});
}
[TestCase]
public void JegyzetbenLevoPeldaErtekTeszt()
{
HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
Assert.Multiple(() =>
{
Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek));
Assert.That(opt.LepesSzam, Is.EqualTo(24));
});
}
[TestCase]
public void JegyzetbenLevoPeldaMegoldasTeszt()
{
HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p);
DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
Assert.Multiple(() =>
{
Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas));
Assert.That(opt.LepesSzam, Is.EqualTo(24));
});
}
[TestCase]
public void NagyPeldaMegoldasErtekTeszt()
{
HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
Assert.Multiple(() =>
{
Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek));
Assert.That(opt.LepesSzam, Is.EqualTo(1700));
});
}
[TestCase]
public void NagyPeldaMegoldasTeszt()
{
HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p);
DinamikusHatizsakPakolas opt = new DinamikusHatizsakPakolas(problema);
Assert.Multiple(() =>
{
Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas));
Assert.That(opt.LepesSzam, Is.EqualTo(1700));
});
}
}
}