diff --git a/ALGA/Optimalizalas/08_DinamikusProgramozas.cs b/ALGA/Optimalizalas/08_DinamikusProgramozas.cs index fd97afc..0d854e7 100644 --- a/ALGA/Optimalizalas/08_DinamikusProgramozas.cs +++ b/ALGA/Optimalizalas/08_DinamikusProgramozas.cs @@ -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; + } + } } diff --git a/Tesztek/08_DinamikusProgramozasTesztek.cs b/Tesztek/08_DinamikusProgramozasTesztek.cs index 7e2a0e0..78a3fd0 100644 --- a/Tesztek/08_DinamikusProgramozasTesztek.cs +++ b/Tesztek/08_DinamikusProgramozasTesztek.cs @@ -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())); -// 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)); -// }); -// } -// } -//} \ No newline at end of file +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())); + 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)); + }); + } + } +} \ No newline at end of file