private static IList <Sahaus> SahaaJarjestyksessa(IList <Sauva> sauvat, int tavaranPituus, int terahukka) { var optimoimaton = new List <Sahaus>(); var kopio = new List <Sauva>(sauvat); var nykyinenSahaus = new Sahaus(tavaranPituus, terahukka); while (0 != kopio.Count) { // kurkkaa bool loytyi = false; for (int indeksi = 0; indeksi < kopio.Count; indeksi++) { var ehdokas = kopio.ElementAt(indeksi); if (ehdokas.pituus() > tavaranPituus) { throw new Exception("Ei naita voi sahata"); } if (ehdokas.pituus() <= nykyinenSahaus.Hukka()) { // sahataan sauva tasta if (nykyinenSahaus.LisaaPatka(ehdokas)) { kopio.RemoveAt(indeksi); loytyi = true; } } } if (!loytyi) { // TODO: vois etsia sauvan joka viela voidaan sahata tasta // aloita uusi parru optimoimaton.Add(nykyinenSahaus); nykyinenSahaus = new Sahaus(tavaranPituus, terahukka); } } // viimeinen optimoimaton.Add(nykyinenSahaus); return(optimoimaton); }
private static IList <Sahaus> BinaaripuuMenetelma(IList <Sauva> sauvat, int tavaranPituus, int terahukka) { // sorttaa isommasta laskevaksi var laskevatMitat = new List <Sauva>(sauvat); laskevatMitat.Sort(); laskevatMitat.Reverse(); // latele ensimmaiseen mihin mahtuu O(n^2) var sahaukset = new List <Sahaus> { new Sahaus(tavaranPituus, terahukka) }; foreach (var sauva in sauvat) { if (sauva.pituus() > tavaranPituus) { throw new Exception("Ei naita voi sahata"); } bool eiMahtunut = true; foreach (var sahaus in sahaukset) { if (sauva.pituus() <= sahaus.Hukka()) { eiMahtunut = !sahaus.LisaaPatka(sauva); } } if (eiMahtunut) { var uusiTavara = new Sahaus(tavaranPituus, terahukka); uusiTavara.LisaaPatka(sauva); sahaukset.Add(uusiTavara); } } return(sahaukset); }