示例#1
0
        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);
        }
示例#2
0
        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);
        }