From 986f22194bcdf78c37fb8059a2e743c663ffbcc7 Mon Sep 17 00:00:00 2001 From: Lendaia Mirai Date: Thu, 6 Nov 2025 16:38:19 +0100 Subject: [PATCH] mostmegisjoabilenytuzet --- ALGA/Optimalizalas/07_NyersEro.cs | 37 ++-- Tesztek/07_NyersEroTesztek.cs | 316 +++++++++++++++--------------- 2 files changed, 175 insertions(+), 178 deletions(-) diff --git a/ALGA/Optimalizalas/07_NyersEro.cs b/ALGA/Optimalizalas/07_NyersEro.cs index d0858b5..99d97e2 100644 --- a/ALGA/Optimalizalas/07_NyersEro.cs +++ b/ALGA/Optimalizalas/07_NyersEro.cs @@ -10,8 +10,8 @@ namespace OE.ALGA.Optimalizalas public int N { get; } public int Wmax { get; } public int[] W { get; } - public double[] P { get; } - public HatizsakProblema(int n, int wmax, int[] w, double[] p) + public float[] P { get; } + public HatizsakProblema(int n, int wmax, int[] w, float[] p) { N = n; Wmax = wmax; @@ -24,21 +24,18 @@ namespace OE.ALGA.Optimalizalas public int OsszSuly(bool[] pakolas) { int osszsuly = 0; - if (pakolas.Length == N) + for (int i = 0; i < N; i++) { - for (int i = 0; i < N; i++) + if (pakolas[i]) { - if (pakolas[i]) - { - osszsuly += W[i]; - } + osszsuly += W[i]; } } return osszsuly; } - public double OsszErtek(bool[] pakolas) + public float OsszErtek(bool[] pakolas) { - double osszertek = 0; + float osszertek = 0; if (pakolas.Length == N) { for (int i = 0; i < N; i++) @@ -60,13 +57,13 @@ namespace OE.ALGA.Optimalizalas { int m; Func generator; - Func josag; + Func josag; int lepesszam; public int LepesSzam { get { return lepesszam; } } - public NyersEro(int m, Func generator, Func josag) + public NyersEro(int m, Func generator, Func josag) { this.m = m; this.generator = generator; @@ -75,10 +72,10 @@ namespace OE.ALGA.Optimalizalas public T OptimalisMegoldas() { T legjobb = generator(0); - for (int i = 0; i < m; i++) + for (int i = 1; i < m; i++) { T tmp = generator(i); - if (josag(tmp) > josag(legjobb)) + if (josag(tmp) >= josag(legjobb)) { legjobb = tmp; } @@ -103,10 +100,10 @@ namespace OE.ALGA.Optimalizalas { int szam = i; bool[] pakolas = new bool[problema.N]; - for (int j = problema.N; j >= 0; j--) + for (int j = problema.N - 1; j >= 0; j--) { bool ertek = (szam % 2 != 0); - pakolas[i] = ertek; + pakolas[j] = ertek; if (ertek && szam > 0) { szam--; @@ -115,10 +112,10 @@ namespace OE.ALGA.Optimalizalas } return pakolas; } - public double Josag(bool[] pakolas) + public float Josag(bool[] pakolas) { - double ertek = 0; - if (problema.Ervenyes(pakolas)) + float ertek = 0; + if (!problema.Ervenyes(pakolas)) { ertek = -1; } @@ -135,7 +132,7 @@ namespace OE.ALGA.Optimalizalas lepesszam = nyersero.LepesSzam; return megoldas; } - public double OptimalisErtek() + public float OptimalisErtek() { return problema.OsszErtek(OptimalisMegoldas()); } diff --git a/Tesztek/07_NyersEroTesztek.cs b/Tesztek/07_NyersEroTesztek.cs index ea44d1a..59d5553 100644 --- a/Tesztek/07_NyersEroTesztek.cs +++ b/Tesztek/07_NyersEroTesztek.cs @@ -1,162 +1,162 @@ -// 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 = "07 - Hátiszák Tesztek")] -// public class HatizsakTesztek -// { -// [TestCase] -// public void UresTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); -// Assert.Multiple(() => -// { -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); -// }); -// Assert.Multiple(() => -// { -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); -// }); -// Assert.Multiple(() => -// { -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.True); -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); -// }); -// } -// [TestCase] -// public void SulyTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// Assert.Multiple(() => -// { -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(10)); -// Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(2)); -// }); -// } -// [TestCase] -// public void JosagTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// Assert.Multiple(() => -// { -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(29)); -// Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(11)); -// }); -// } -// [TestCase] -// public void ErvenyesTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// Assert.Multiple(() => -// { -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.False); -// Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); -// }); -// } -// } +namespace OE.ALGA.Tesztek.Optimalizalas +{ + [TestFixture(Category = "Optimalizalas", TestName = "07 - Hátiszák Tesztek")] + public class HatizsakTesztek + { + [TestCase] + public void UresTeszt() + { + HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); + Assert.Multiple(() => + { + Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); + }); + Assert.Multiple(() => + { + Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(0)); + }); + Assert.Multiple(() => + { + Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); + Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.True); + Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); + }); + } + [TestCase] + public void SulyTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + Assert.Multiple(() => + { + Assert.That(problema.OsszSuly(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszSuly(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(10)); + Assert.That(problema.OsszSuly(PakolasTesztEsetek.feligPakolas), Is.EqualTo(2)); + }); + } + [TestCase] + public void JosagTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + Assert.Multiple(() => + { + Assert.That(problema.OsszErtek(PakolasTesztEsetek.uresPakolas), Is.EqualTo(0)); + Assert.That(problema.OsszErtek(PakolasTesztEsetek.teljesPakolas), Is.EqualTo(29)); + Assert.That(problema.OsszErtek(PakolasTesztEsetek.feligPakolas), Is.EqualTo(11)); + }); + } + [TestCase] + public void ErvenyesTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + Assert.Multiple(() => + { + Assert.That(problema.Ervenyes(PakolasTesztEsetek.uresPakolas), Is.True); + Assert.That(problema.Ervenyes(PakolasTesztEsetek.teljesPakolas), Is.False); + Assert.That(problema.Ervenyes(PakolasTesztEsetek.feligPakolas), Is.True); + }); + } + } -// [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Tesztek")] -// public class NyersEroTesztek -// { -// [TestCase] -// public void UresTeszt() -// { -// int[] A = { 4, 6, 7, 4, 2, 1 }; -// NyersEro opt = new NyersEro( -// 0, -// x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, -// x => { Guardian.Recursion.CheckStackTrace(); return x; }); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(4)); -// Assert.That(opt.LepesSzam, Is.EqualTo(0)); -// }); -// } -// [TestCase] -// public void TombLegnagyobbEleme() -// { -// int[] A = { 4, 6, 7, 4, 2, 1 }; -// NyersEro opt = new NyersEro( -// A.Length, -// x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, -// x => { Guardian.Recursion.CheckStackTrace(); return x; }); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(7)); -// Assert.That(opt.LepesSzam, Is.EqualTo(5)); -// }); -// } + [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Tesztek")] + public class NyersEroTesztek + { + [TestCase] + public void UresTeszt() + { + int[] A = { 4, 6, 7, 4, 2, 1 }; + NyersEro opt = new NyersEro( + 0, + x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, + x => { Guardian.Recursion.CheckStackTrace(); return x; }); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(4)); + Assert.That(opt.LepesSzam, Is.EqualTo(0)); + }); + } + [TestCase] + public void TombLegnagyobbEleme() + { + int[] A = { 4, 6, 7, 4, 2, 1 }; + NyersEro opt = new NyersEro( + A.Length, + x => { Guardian.Recursion.CheckStackTrace(); return A[x - 1]; }, + x => { Guardian.Recursion.CheckStackTrace(); return x; }); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EqualTo(7)); + Assert.That(opt.LepesSzam, Is.EqualTo(5)); + }); + } -// } + } -// [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Hátizsák Pakolás Tesztek")] -// public class NyersEroHatizsakPakolasTesztek -// { -// [TestCase] -// public void UresTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); -// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(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); -// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(63)); -// }); -// } -// [TestCase] -// public void JegyzetbenLevoPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); -// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); -// Assert.That(opt.LepesSzam, Is.EqualTo(63)); -// }); -// } -// [TestCase] -// public void NagyPeldaMegoldasErtekTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); -// Assert.That(opt.LepesSzam, Is.EqualTo(131071)); -// }); -// } -// [TestCase] -// public void NagyPeldaMegoldasTeszt() -// { -// HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); -// NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); -// Assert.Multiple(() => -// { -// Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas)); -// Assert.That(opt.LepesSzam, Is.EqualTo(131071)); -// }); -// } -// } -// } + [TestFixture(Category = "Optimalizalas", TestName = "07 - Nyers Ero Hátizsák Pakolás Tesztek")] + public class NyersEroHatizsakPakolasTesztek + { + [TestCase] + public void UresTeszt() + { + HatizsakProblema problema = new HatizsakProblema(0, 0, [], []); + NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(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); + NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.jegyzet_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(63)); + }); + } + [TestCase] + public void JegyzetbenLevoPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.jegyzet_n, PakolasTesztEsetek.jegyzet_Wmax, PakolasTesztEsetek.jegyzet_w, PakolasTesztEsetek.jegyzet_p); + NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.jegyzet_optimalis_pakolas)); + Assert.That(opt.LepesSzam, Is.EqualTo(63)); + }); + } + [TestCase] + public void NagyPeldaMegoldasErtekTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisErtek(), Is.EqualTo(PakolasTesztEsetek.nagy_optimalis_ertek)); + Assert.That(opt.LepesSzam, Is.EqualTo(131071)); + }); + } + [TestCase] + public void NagyPeldaMegoldasTeszt() + { + HatizsakProblema problema = new HatizsakProblema(PakolasTesztEsetek.nagy_n, PakolasTesztEsetek.nagy_Wmax, PakolasTesztEsetek.nagy_w, PakolasTesztEsetek.nagy_p); + NyersEroHatizsakPakolas opt = new NyersEroHatizsakPakolas(problema); + Assert.Multiple(() => + { + Assert.That(opt.OptimalisMegoldas(), Is.EquivalentTo(PakolasTesztEsetek.nagy_optimalis_pakolas)); + Assert.That(opt.LepesSzam, Is.EqualTo(131071)); + }); + } + } +}