Beispiel #1
0
        public void Test_Empty_OnCreation()
        {
            MaxPQ <Int32> pq = new MaxPQ <Int32>(1);

            Assert.True(pq.IsEmpty);
            Assert.Equal(0, pq.Count);
        }
        static void Main(string[] args)
        {
            int n           = 200000;
            int repeatTimes = 5;
            int doubleTimes = 4;

            for (int i = 0; i < doubleTimes; i++)
            {
                Console.WriteLine("n=" + n);
                // 升序数组
                long totalTime = 0;
                Console.Write("Ascending:\t");
                for (int j = 0; j < repeatTimes; j++)
                {
                    MaxPQ <int> pq   = new MaxPQ <int>(n);
                    int[]       data = GetAscending(n);
                    long        time = Test(pq, data);
                    Console.Write(time + "\t");
                    totalTime += time;
                }
                Console.WriteLine("Average:" + totalTime / repeatTimes);
                // 降序数组
                totalTime = 0;
                Console.Write("Descending:\t");
                for (int j = 0; j < repeatTimes; j++)
                {
                    MaxPQ <int> pq   = new MaxPQ <int>(n);
                    int[]       data = GetDescending(n);
                    long        time = Test(pq, data);
                    Console.Write(time + "\t");
                    totalTime += time;
                }
                Console.WriteLine("Average:" + totalTime / repeatTimes);
                // 全部元素相同
                totalTime = 0;
                Console.Write("All Same:\t");
                for (int j = 0; j < repeatTimes; j++)
                {
                    MaxPQ <int> pq   = new MaxPQ <int>(n);
                    int[]       data = GetSame(n, 17763);
                    long        time = Test(pq, data);
                    Console.Write(time + "\t");
                    totalTime += time;
                }
                Console.WriteLine("Average:" + totalTime / repeatTimes);
                // 只有两个值
                totalTime = 0;
                Console.Write("Binary Dist.:\t");
                for (int j = 0; j < repeatTimes; j++)
                {
                    MaxPQ <int> pq   = new MaxPQ <int>(n);
                    int[]       data = GetBinary(n, 15254, 17763);
                    long        time = Test(pq, data);
                    Console.Write(time + "\t");
                    totalTime += time;
                }
                Console.WriteLine("Average:" + totalTime / repeatTimes);
                n *= 2;
            }
        }
 public MinPQWithSize(int max, IComparer <T> comparer)
 {
     //m_pq = new T[max + 2];
     m_max      = max;
     m_maxPQ    = new MaxPQ <T>(max, comparer);
     m_comparer = comparer;
 }
Beispiel #4
0
    static T ExtractMax <T>(MaxPQ <T> pq) where T : IComparable <T>
    {
        T x = pq.Top;

        pq.Pop();
        return(x);
    }
        public static void Main(string[] arg)
        {
            string filename = "words3.txt";
            string[] a = Util.readWords(filename);

            MaxPQ<string> pqMax = new MaxPQ<string>();

            foreach (var item in a)
            {
                pqMax.insert(item);
            }
            // se vor afisa cuvintele in ordine descrescatoare
            Console.WriteLine("MaxPQ");
            while (!pqMax.isEmpty())
            {
                Console.WriteLine(pqMax.delMax());
            }

            MinPQ<string> pqMin = new MinPQ<string>();
            foreach (var item in a)
            {
                pqMin.insert(item);
            }
            // se vor afisa cuvintele in ordine crescatoare
            Console.WriteLine("\nMinPQ");
            while (!pqMin.isEmpty())
            {
                Console.WriteLine(pqMin.delMin());
            }
        }
Beispiel #6
0
    private void exch(T i, T j)
    {
        MaxPQ <T> temp = dict[i];

        dict[i] = dict[j];
        dict[j] = temp;
    }
Beispiel #7
0
        public void IsEmpty_PQWithOneElement_ReturnsFalse()
        {
            MaxPQ <int> pq = new MaxPQ <int>(100);

            pq.Insert(1);

            Assert.IsFalse(pq.IsEmpty());
        }
        public void Hamlet_MaxPQ()
        {
            // arrange
            var pq = new MaxPQ <string>();

            // act / assert
            ArrayPQHamlet(pq, hamlet_tops, hamlet_leftovers);
        }
 public void MaxPQTiny()
 {
     MaxPQ<string> pq = new MaxPQ<string>();
      string streamName = "Algs4-Data\\TinyPQ.txt";
      string[] expectedResults = { "Q", "X", "P" };
      int expectedRemainder = 6;
      CommonPriorityQueueUnitTests.StringPQTest(streamName, pq, expectedResults, expectedRemainder);
 }
Beispiel #10
0
        public void IsEmpty_AfterRemovingLastElement_ReturnsTrue()
        {
            MaxPQ <int> pq = new MaxPQ <int>(100);

            pq.Insert(1);
            pq.DelMax();

            Assert.IsTrue(pq.IsEmpty());
        }
Beispiel #11
0
        public void Test_Empty_WhenCleaning()
        {
            MaxPQ <Int32> pq = new MaxPQ <Int32>(1);

            pq.Add(2);
            pq.DeleteMax();

            Assert.True(pq.IsEmpty);
            Assert.Equal(0, pq.Count);
        }
Beispiel #12
0
        public void DelMax_PQWithOneElement_ReturnsThatElement()
        {
            MaxPQ <int> pq = new MaxPQ <int>(100);

            pq.Insert(1);

            int retVal = pq.DelMax();

            Assert.AreEqual(1, retVal);
        }
Beispiel #13
0
        public void Test_NotEmpty_WhenAdding()
        {
            MaxPQ <Int32> pq = new MaxPQ <Int32>(2);

            pq.Add(18);
            pq.Add(2);

            Assert.False(pq.IsEmpty);
            Assert.Equal(2, pq.Count);
        }
Beispiel #14
0
        public void Test_Add_Max()
        {
            MaxPQ <Int32> pq = new MaxPQ <Int32>(10);

            for (int i = 1; i < 11; i++)
            {
                pq.Add(i);
            }

            Assert.Equal(10, pq.Max());
        }
        static void Main(string[] args)
        {
            //    P
            //    R P
            //    R P I
            //    R P O I
            //    P O I
            //    R P O I
            //    P O I
            //    O I
            //    O I I
            //    I I
            //    T I I
            //    I I
            //    Y I I
            //    I I
            //    I
            //
            //    Q
            //    U Q
            //    U Q E
            //    Q E
            //    E
            //
            //    U
            //
            //    E
            //

            MaxPQ <char> pq    = new MaxPQ <char>();
            string       input = "P R I O * R * * I * T * Y * * * Q U E * * * U * E";

            foreach (char c in input)
            {
                if (c == ' ')
                {
                    continue;
                }
                else if (c == '*')
                {
                    pq.DelMax();
                }
                else
                {
                    pq.Insert(c);
                }

                foreach (char n in pq)
                {
                    Console.Write(n + " ");
                }
                Console.WriteLine();
            }
        }
Beispiel #16
0
        public void DelMax_PQWith3Element_ReturnsGreater()
        {
            MaxPQ <int> pq = new MaxPQ <int>(100);

            pq.Insert(1);
            pq.Insert(3);
            pq.Insert(2);

            Assert.AreEqual(3, pq.DelMax());
            Assert.AreEqual(2, pq.DelMax());
            Assert.AreEqual(1, pq.DelMax());
        }
        static void Main(string[] args)
        {
            // 输入格式: buy 20.05 100
            var buyer  = new MaxPQ <Ticket>();
            var seller = new MinPQ <Ticket>();

            var n = int.Parse(Console.ReadLine());

            for (var i = 0; i < n; i++)
            {
                var ticket = new Ticket();
                var item   = Console.ReadLine().Split(' ');

                ticket.Price = double.Parse(item[1]);
                ticket.Share = int.Parse(item[2]);
                if (item[0] == "buy")
                {
                    buyer.Insert(ticket);
                }
                else
                {
                    seller.Insert(ticket);
                }
            }

            while (!buyer.IsEmpty() && !seller.IsEmpty())
            {
                if (buyer.Max().Price < seller.Min().Price)
                {
                    break;
                }
                var buy  = buyer.DelMax();
                var sell = seller.DelMin();
                Console.Write("sell $" + sell.Price + " * " + sell.Share);
                if (buy.Share > sell.Share)
                {
                    Console.WriteLine(" -> " + sell.Share + " -> $" + buy.Price + " * " + buy.Share + " buy");
                    buy.Share -= sell.Share;
                    buyer.Insert(buy);
                }
                else if (buy.Share < sell.Share)
                {
                    sell.Share -= buy.Share;
                    seller.Insert(sell);
                    Console.WriteLine(" -> " + buy.Share + " -> $" + buy.Price + " * " + buy.Share + " buy");
                }
                else
                {
                    Console.WriteLine(" -> " + sell.Share + " -> $" + buy.Price + " * " + buy.Share + " buy");
                }
            }
        }
Beispiel #18
0
        public void TestMaxPQ()
        {
            int amounts = 10;

            MaxPQ pq = new MaxPQ(amounts);

            Random rand = new Random();
            for (int i = 0; i < amounts; i++)
                pq.Insert(rand.Next(0, 1000).ToString());

            Debug.WriteLine(Sort.Show(pq.PQs));
            pq.DelMax();
            Debug.WriteLine(Sort.Show(pq.PQs));
        }
Beispiel #19
0
        public void TestMaxPQ() {
            var arr = CreateRandomArray(10);
            Insertion<int>.Sort(arr);
            StdOut.WriteLine(arr);

            var pq = new MaxPQ<int>();
            foreach (int i in arr) {
                pq.Insert(i);
            }

            while (!pq.IsEmpty) {
                StdOut.WriteLine("delete max: {0}", pq.DelMax());
            }
        }
Beispiel #20
0
        public void Test_Add_DeleteMax_Order()
        {
            MaxPQ <Int32> pq = new MaxPQ <Int32>(10);

            for (int i = 1; i < 11; i++)
            {
                pq.Add(i);
            }

            for (int i = 10; i > 0; i--)
            {
                Assert.Equal(pq.DeleteMax(), i);
            }
        }
Beispiel #21
0
    public int CompareTo(MaxPQ <T> obj)        //Required type arguments
    {
        int results = 0;

        if (this.pq == obj.pq)
        {
            results = this.N.CompareTo(obj.N);
        }
        else
        {
            this.pq.CompareTo(obj.pq);
        }
        return(results);
    }
Beispiel #22
0
        public void Run()
        {
            Console.WriteLine("Choose file:");   // Prompt
            Console.WriteLine("1 - tinyPQ.txt"); // Prompt
            Console.WriteLine("or quit");        // Prompt

            var fileNumber = Console.ReadLine();
            var fieName    = string.Empty;

            switch (fileNumber)
            {
            case "1":
                fieName = "tinyPQ.txt";
                break;

            case "quit":
                return;

            default:
                return;
            }


            var @in   = new In(string.Format("Files\\Sorting\\{0}", fieName));
            var words = @in.ReadAllStrings();

            //var list = words.Select(word => new StringComparable(word)).ToList();

            //var listComparable = list.Cast<IComparable>().ToList();
            //var arrayComparable = list.Cast<IComparable>().ToArray();
            var listStrings = words.ToList();


            var pq = new MaxPQ <string>(new StringComparer());

            //Fill Priority Queue
            foreach (var word in listStrings)
            {
                pq.Insert(word);
            }
            // print results
            foreach (var item in pq)
            {
                Console.WriteLine(item);
            }


            Console.ReadLine();
        }
        static long Test(MaxPQ <int> pq, int[] data)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < data.Length; i++)
            {
                pq.Insert(data[i]);
            }
            for (int i = 0; i < data.Length; i++)
            {
                pq.DelMax();
            }
            sw.Stop();
            return(sw.ElapsedMilliseconds);
        }
Beispiel #24
0
    public void maxpq()
    {
        MaxPQ <string> pq = new MaxPQ <string>();

        string item = "vonNeumann  2/12/1994  4732.35";

        if (!item.Equals("-"))
        {
            pq.insert(item);
        }
        else if (!pq.IsEmpty())
        {
            print(pq.delMax() + " ");
        }
        print("(" + pq.size() + " left on pq)");
    }
Beispiel #25
0
    static IEnumerable <int> MedianMaintenance(IEnumerable <int> xs)
    {
        MaxPQ <int> lowValues = PQ <int> .CreateMaxPQ();

        MinPQ <int> highValues = PQ <int> .CreateMinPQ();

        int y = 0;

        foreach (var x in xs)       //lg(N!) + 4/3 lg (N!) == 7/3 lg (N!)
        {
            if (lowValues.Size > 0) //lg(N!)
            {
                if (x > lowValues.Top)
                {
                    highValues.Push(x); //lg N
                }
                else
                {
                    lowValues.Push(x); //lg N
                }
            }
            else
            {
                lowValues.Push(x); //lg N
            }

            //TODO: Not a simple analysis, depends on order of data in xs
            //Draft: Suppose 1/3 per branch and 2 lg N Push and Extract, the expected value would be 4/3 lg (N!)
            if (lowValues.Size > highValues.Size + 1)
            {
                highValues.Push(ExtractMax(lowValues)); //2 lg N (Push + Extract)
            }
            else if (highValues.Size > lowValues.Size)
            {
                lowValues.Push(ExtractMin(highValues)); //2 lg N (Push + Extract)
            }
            //else { } //0


            y = lowValues.Top;
            yield return(y);

            //DEBUG
            //Console.WriteLine("Median of {0,4} = {1,4}", lowValues.Size + highValues.Size, y);
        }
    }
Beispiel #26
0
        static long Test(MaxPQ <int> pq, int n)
        {
            // 生成数据
            var initData   = new int[n];
            var appendData = new int[n / 2];

            for (var i = 0; i < n; i++)
            {
                initData[i] = random.Next();
            }
            for (var i = 0; i < n / 2; i++)
            {
                appendData[i] = random.Next();
            }

            // 开始测试
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            // 插入 n 个元素
            for (var i = 0; i < n; i++)
            {
                pq.Insert(initData[i]);
            }
            // 删去一半
            for (var i = 0; i < n / 2; i++)
            {
                pq.DelMax();
            }
            // 插入一半
            for (var i = 0; i < n / 2; i++)
            {
                pq.Insert(appendData[i]);
            }
            // 删除全部
            for (var i = 0; i < n; i++)
            {
                pq.DelMax();
            }

            stopwatch.Stop();
            return(stopwatch.ElapsedMilliseconds);
        }
Beispiel #27
0
        public void Run()
        {
            Console.WriteLine("Choose file:"); // Prompt
            Console.WriteLine("1 - tinyPQ.txt"); // Prompt
            Console.WriteLine("or quit"); // Prompt

            var fileNumber = Console.ReadLine();
            var fieName = string.Empty;
            switch (fileNumber)
            {
                case "1":
                    fieName = "tinyPQ.txt";
                    break;
                case "quit":
                    return;
                default:
                    return;
            }

            var @in = new In(string.Format("Files\\Sorting\\{0}", fieName));
            var words = @in.ReadAllStrings();

            //var list = words.Select(word => new StringComparable(word)).ToList();

            //var listComparable = list.Cast<IComparable>().ToList();
            //var arrayComparable = list.Cast<IComparable>().ToArray();
            var listStrings = words.ToList();

            var pq = new MaxPQ<string>(new StringComparer());
            //Fill Priority Queue
            foreach (var word in listStrings)
            {
                pq.Insert(word);
            }
            // print results
            foreach (var item in pq)
            {
                Console.WriteLine(item);
            }

            Console.ReadLine();
        }
Beispiel #28
0
        public void TestMaxPQ()
        {
            var arr = CreateRandomArray(10);

            Insertion <int> .Sort(arr);

            StdOut.WriteLine(arr);

            var pq = new MaxPQ <int>();

            foreach (int i in arr)
            {
                pq.Insert(i);
            }

            while (!pq.IsEmpty)
            {
                StdOut.WriteLine("delete max: {0}", pq.DelMax());
            }
        }
        static void Main(string[] args)
        {
            var    repeatTime = 1000000;
            double totalTime  = 0;

            for (var i = 0; i < repeatTime; i++)
            {
                var pq = new MaxPQ <char>();
                totalTime += test(pq);
            }
            Console.WriteLine("Normal MaxPQ: " + totalTime);

            totalTime = 0;
            for (var i = 0; i < repeatTime; i++)
            {
                var pqNoExch = new MaxPQNoExch <char>();
                totalTime += test(pqNoExch);
            }
            Console.WriteLine("MaxPQ without Exch: " + totalTime);
        }
        static void Main(string[] args)
        {
            int doubleTime = 6;
            int repeatTime = 6;
            int n          = 1000000;

            for (int i = 0; i < doubleTime; i++)
            {
                int totalDelCount = 0;
                Console.WriteLine("n=" + n);
                for (int j = 0; j < repeatTime; j++)
                {
                    MaxPQ <int> pq       = new MaxPQ <int>(n);
                    int         delCount = Test(n, pq);
                    totalDelCount += delCount;
                    Console.Write(delCount + "\t");
                }
                Console.WriteLine("平均最大删除次数:" + totalDelCount / repeatTime);
                n *= 2;
            }
        }
Beispiel #31
0
        static void Main(string[] args)
        {
            var doubleTime = 5;
            var repeatTime = 5;
            var n          = 100000;

            for (var i = 0; i < doubleTime; i++)
            {
                long totalTime = 0;
                Console.WriteLine("n=" + n);
                for (var j = 0; j < repeatTime; j++)
                {
                    var pq   = new MaxPQ <int>(n);
                    var time = Test(pq, n);
                    Console.Write(time + "\t");
                    totalTime += time;
                }
                Console.WriteLine("平均用时:" + totalTime / repeatTime + "毫秒");
                n *= 2;
            }
        }
Beispiel #32
0
        static void Main(string[] args)
        {
            var doubleTime = 6;
            var repeatTime = 6;
            var n          = 1000000;

            for (var i = 0; i < doubleTime; i++)
            {
                var totalDelCount = 0;
                Console.WriteLine("n=" + n);
                for (var j = 0; j < repeatTime; j++)
                {
                    var pq       = new MaxPQ <int>(n);
                    var delCount = Test(n, pq);
                    totalDelCount += delCount;
                    Console.Write(delCount + "\t");
                }
                Console.WriteLine("平均最大删除次数:" + totalDelCount / repeatTime);
                n *= 2;
            }
        }
Beispiel #33
0
        public void TestMaxPQ()
        {
            var pq = new MaxPQ <int>();

            for (var i = 0; i < 100; ++i)
            {
                pq.Enqueue(i);
            }
            Assert.Equal(100, pq.Count);
            Assert.False(pq.IsEmpty);
            for (var i = 0; i < 100; ++i)
            {
                Assert.Equal(99 - i, pq.DelMax());
                Assert.Equal(99 - i, pq.Count);
            }
            Assert.True(pq.IsEmpty);

            foreach (var v in pq)
            {
                console.WriteLine("{0}", v);
            }
        }
Beispiel #34
0
        static int Test(int n, MaxPQ <int> pq)
        {
            var timer = new Timer(1000);

            timer.Elapsed += new ElapsedEventHandler(StopRunning);
            for (var i = 0; i < n; i++)
            {
                pq.Insert(random.Next());
            }

            var delCount = 0;

            StartRunning();
            timer.Start();
            while (isRunning && !pq.IsEmpty())
            {
                pq.DelMax();
                delCount++;
            }
            timer.Stop();
            return(delCount);
        }
Beispiel #35
0
        public int LastStoneWeight(int[] stones)
        {
            MaxPQ maxPQ = new MaxPQ(stones);

            while (maxPQ.Count() >= 2)
            {
                int x = maxPQ.RemoveMax();
                int y = maxPQ.RemoveMax();
                if (x != y)
                {
                    maxPQ.Insert(Math.Abs(x - y));
                }
            }

            if (maxPQ.IsEmpty())
            {
                return(0);
            }
            else
            {
                return(maxPQ.RemoveMax());
            }
        }
Beispiel #36
0
 public void Initialize()
 {
     _target = new MaxPQ<Distance>();
 }
Beispiel #37
0
		public static void Test(){
			int[] a = { 23, 12, 9, 30, 2, 1, 50 };
			var mpq = new MaxPQ(a);
			for(int i=1; i<mpq.pq.Length; i++)
				Out(mpq.pq[i]+" ");
		}
Beispiel #38
0
	public IEnumerable<int> KSE_MaxHeap(int[] A, int K){
		var pq = new MaxPQ(A);
				
		for(int i=0; i<K; i++)
			yield return pq.DelMax();
	}