示例#1
0
        public bool IsSubset(PowerSet <T> set2)
        {
            // возвращает true, если set2 есть
            // подмножество текущего множества,
            // иначе false
            if (this.count == 0)
            {
                return(false);
            }
            int count = set2.count;

            for (int i = 0; i < set2.count; i++)
            {
                if (Get(set2.slots[i]))
                {
                    count--;
                }
            }
            if (count == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
示例#2
0
 public bool IsSubset(PowerSet <T> set2)
 {
     if (Size() >= set2.Size())
     {
         if (set2.Size() == 0)
         {
             return(true);
         }
         for (int i = 0; i < size; i++)
         {
             if (set2.slots[i] != null && !set2.slots[i].Equals(default(T)))
             {
                 if (!Get(set2.slots[i]))
                 {
                     break;
                 }
             }
             if (i == size - 1)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#3
0
        public PowerSet <T> Union(PowerSet <T> set2)
        {
            if (set2 == null)
            {
                return(null);
            }

            PowerSet <T> resultSet = new PowerSet <T>();

            for (int i = 0; i < _values.Length; i++)
            {
                if (_slotsStatus[i] == SlotStatus.Fill)
                {
                    resultSet.Put(_values[i]);
                }
            }

            for (int i = 0; i < set2._values.Length; i++)
            {
                if (set2._slotsStatus[i] == SlotStatus.Fill)
                {
                    resultSet.Put(set2._values[i]);
                }
            }

            return(resultSet);
        }
        public void Intersection()
        {
            // Intersection with empty set
            Assert.AreEqual(0, testPowerSet1.Intersection(testPowerSet0).capacity);

            // Intersection with PowerSet2 contains 5 items (expected 2 items)
            testPowerSet = testPowerSet1.Intersection(testPowerSet2);
            Assert.AreEqual(2, testPowerSet.capacity);
            Assert.AreEqual(true, testPowerSet.Get(14));
            Assert.AreEqual(true, testPowerSet.Get(16));
            Assert.AreEqual(false, testPowerSet.Get(100));

            // Putting 5 items to empty set
            testPowerSet0.Put(101);
            testPowerSet0.Put(102);
            testPowerSet0.Put(103);
            testPowerSet0.Put(104);
            testPowerSet0.Put(105);
            Assert.AreEqual(5, testPowerSet0.capacity);

            // Intersection with PowerSet0 contains 5 different items (expected empty set)
            testPowerSet = testPowerSet1.Intersection(testPowerSet0);
            Assert.AreEqual(0, testPowerSet.capacity);
            Assert.AreEqual(false, testPowerSet.Get(101));
        }
示例#5
0
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2

            PowerSet <T> differenced = new PowerSet <T>();

            if (set2.count == 0)
            ///return this;
            {
                foreach (T item in slots)
                {
                    differenced.Put(item);
                }
            }

            foreach (T item in this.slots)
            {
                if (!set2.Get(item))
                {
                    differenced.Put(item);
                }
            }
            if (differenced.count > 0)
            {
                return(differenced);
            }
            else
            {
                return(differenced);
            }
        }
示例#6
0
        public PowerSet <T> Intersection(PowerSet <T> set2) // пересечение текущего множества и set2
        {
            PowerSet <T> setIntersection = new PowerSet <T>();

            if (set2 != null)
            {
                for (int i = 0; i < size; i++)
                {
                    if (slots[i] == null)
                    {
                        continue;
                    }
                    else if (slots[i].Equals(default(T)))
                    {
                        continue;
                    }
                    if (set2.Get(slots[i]))
                    {
                        setIntersection.Put(slots[i]);
                    }
                }
                return(setIntersection);
            }
            return(setIntersection);
        }
示例#7
0
        static void TestFunc(PowerSet <int> set1, PowerSet <int> set2, Func <PowerSet <int>, PowerSet <int>, PowerSet <int> > testFunc)
        {
            if (set1.Size() == 0)
            {
                Console.Write("set1 is empty");
            }
            else
            {
                Console.WriteLine("set1");
                for (int i = 0; i < set1._values.Length; i++)
                {
                    if (set1._slotsStatus[i] == PowerSet <int> .SlotStatus.Fill)
                    {
                        Console.Write(set1._values[i] + " ");
                    }
                }
            }

            Console.WriteLine();

            if (set2.Size() == 0)
            {
                Console.Write("set2 is empty");
            }
            else
            {
                Console.WriteLine("set2");
                for (int i = 0; i < set2._values.Length; i++)
                {
                    if (set2._slotsStatus[i] == PowerSet <int> .SlotStatus.Fill)
                    {
                        Console.Write(set2._values[i] + " ");
                    }
                }
            }

            Console.WriteLine();

            PowerSet <int> resultSet = testFunc(set1, set2);

            if (resultSet.Size() == 0)
            {
                Console.Write("result set is empty");
            }
            else
            {
                Console.WriteLine("result set");
                for (int i = 0; i < resultSet._values.Length; i++)
                {
                    if (resultSet._slotsStatus[i] == PowerSet <int> .SlotStatus.Fill)
                    {
                        Console.Write(resultSet._values[i] + " ");
                    }
                }
            }

            Console.WriteLine();

            Console.WriteLine(new string('=', 50));
        }
示例#8
0
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            PowerSet <T> interset = new PowerSet <T>();

            if (set2 != null)
            {
                for (int i = 0; i < size; i++)
                {
                    if (slots[i] == null)
                    {
                        continue;
                    }
                    else if (slots[i].Equals(default(T)))
                    {
                        continue;
                    }
                    if (set2.Get(slots[i]))
                    {
                        interset.Put(slots[i]);
                    }
                }
                return(interset);
            }
            return(null);
        }
示例#9
0
 public bool IsSubset(PowerSet <T> set2) // возвращает true, если set2 есть подмножество текущего множества, иначе false
 {
     if (Size() >= set2.Size())
     {
         if (set2.Size() == 0)
         {
             return(true);
         }
         for (int i = 0; i < size; i++)
         {
             if (set2.slots[i] != null && !set2.slots[i].Equals(default(T)))
             {
                 if (!Get(set2.slots[i]))
                 {
                     break;
                 }
             }
             if (i == size - 1)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#10
0
        public static void PowerSetTest()
        {
            PowerSet <int> ps1 = new PowerSet <int>();
            PowerSet <int> ps2 = new PowerSet <int>();


            ps1.Put(1);
            ps1.Put(3);
            ps1.Put(5);

            ps2.Put(2);
            ps2.Put(3);
            ps2.Put(4);


            var ps3 = ps1.Difference(ps2);

            //Console.WriteLine(ps3);
            foreach (var item in ps3.items.Keys)
            {
                Console.WriteLine(item);
            }

            //Console.WriteLine($"Size: {ps3.Size()}");
        }
        public void TestInitialize()
        {
            // dynamic PowerSet
            testPowerSet = new PowerSet <int>();

            // zero PowerSet
            testPowerSet0 = new PowerSet <int>();

            // 5 items PowerSet {8 10 12 14 16}
            testPowerSet1 = new PowerSet <int>();
            testPowerSet1.Put(8);
            testPowerSet1.Put(10);
            testPowerSet1.Put(12);
            testPowerSet1.Put(14);
            testPowerSet1.Put(16);
            Assert.AreEqual(5, testPowerSet1.capacity);

            // 5 items PowerSet {14 16 162 0 5}
            testPowerSet2 = new PowerSet <int>();
            testPowerSet2.Put(14);
            testPowerSet2.Put(16);
            testPowerSet2.Put(162);
            testPowerSet2.Put(0);
            testPowerSet2.Put(5);
            Assert.AreEqual(5, testPowerSet2.capacity);
        }
        public bool IsSubset(PowerSet <T> set2)
        {
            // возвращает true, если set2 есть
            // подмножество текущего множества,
            // иначе false
            int size  = this.Size();
            var union = this.Union(set2);

            return(union.Size() == size);
        }
示例#13
0
        static PowerSet <int> CreatePowerSet(int startValue, int finishValue)
        {
            PowerSet <int> resultSet = new PowerSet <int>();

            for (int i = startValue; i <= finishValue; i++)
            {
                resultSet.Put(i);
            }

            return(resultSet);
        }
        /// <summary>
        /// определяет проверку того, что множество, передаваемое в параметре, является подмножеством текущего множества
        /// </summary>
        /// <param name="set2">множество элементов типа T</param>
        /// <returns>возвращает true если set2 есть подмножество текущего элемента, иначе false</returns>
        public bool IsSubset(PowerSet <T> set2)
        {
            foreach (T item in set2.items)
            {
                // провекра, что все элементы второго множества присутствуют в первом
                if (!Get(item))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#15
0
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            // пересечение текущего множества и set2
            PowerSet <T> intersect = new PowerSet <T>();

            foreach (var item in ps)
            {
                if (set2.Get(item))
                {
                    intersect.Put(item);
                }
            }
            return(intersect);
        }
示例#16
0
 public bool IsSubset(PowerSet <T> set2)
 {
     foreach (var slot in set2.slots)
     {
         foreach (var item in slot)
         {
             if (!Get(item))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            // пересечение текущего множества и set2
            PowerSet <T> temp = new PowerSet <T>();

            for (int i = 0; i < pool.Count; i++)
            {
                if (set2.Get(pool[i]) == true)
                {
                    temp.Put(pool[i]);
                }
            }
            return(temp);
        }
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2
            var diff = new PowerSet <T>();

            foreach (var item in items.Keys)
            {
                if (!set2.Get(item))
                {
                    diff.Put(item);
                }
            }
            return(diff);
        }
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2
            PowerSet <T> temp = new PowerSet <T>();

            for (int i = 0; i < pool.Count; i++)
            {
                if (set2.Get(pool[i]) == false)
                {
                    temp.Put(pool[i]);
                }
            }
            return(temp);
        }
示例#20
0
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2
            // пересечение текущего множества и set2
            PowerSet <T> difset = new PowerSet <T>();

            foreach (var item in ps)
            {
                if (!set2.Get(item))
                {
                    difset.Put(item);
                }
            }
            return(difset);
        }
示例#21
0
        public PowerSet <T> Union(PowerSet <T> set2)
        {
            // объединение текущего множества и set2
            PowerSet <T> union_set = new PowerSet <T>();

            foreach (var item in ps)
            {
                union_set.Put(item);
            }
            foreach (var item in set2.ps)
            {
                union_set.Put(item);
            }
            return(union_set);
        }
        public PowerSet <T> Union(PowerSet <T> set2)
        {
            // объединение текущего множества и set2
            var union = new PowerSet <T>();

            foreach (var item in items.Keys)
            {
                union.Put(item);
            }
            foreach (var item in set2.items.Keys)
            {
                union.Put(item);
            }
            return(union);
        }
        /// <summary>
        /// вычисляет и возвращает новое множество-перечение текущего множества с множеством set2
        /// </summary>
        /// <param name="set2">множество типа значений типа T</param>
        /// <returns>множество-пересечение PowerSet<T> текущего множества и множества set2</returns>
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            PowerSet <T> interSet = new PowerSet <T>();

            foreach (T item in items)
            {
                // добавление всех элементов первого множества, которые присутствуют и во втором множестве
                if (set2.items.Contains(item))
                {
                    interSet.Put(item);
                }
            }

            return(interSet);
        }
示例#24
0
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            PowerSet <T> result = new PowerSet <T>();

            foreach (var slot in slots)
            {
                foreach (var item in slot)
                {
                    if (set2.Get(item))
                    {
                        result.Put(item);
                    }
                }
            }
            return(result);
        }
示例#25
0
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            // разница текущего множества и set2
            var currValues = WhereIsNotNull(slots);
            var set2Values = WhereIsNotNull(set2.slots);
            var result     = new PowerSet <T>();

            foreach (var currValue in currValues)
            {
                if (!set2Values.Contains(currValue))
                {
                    result.Put(currValue);
                }
            }
            return(result);
        }
示例#26
0
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            // пересечение текущего множества и set2
            var currValues = WhereIsNotNull(slots);
            var set2Values = WhereIsNotNull(set2.slots);
            var result     = new PowerSet <T>();

            foreach (var currValue in currValues)
            {
                if (set2Values.Contains(currValue))
                {
                    result.Put(currValue);
                }
            }
            return(result);
        }
示例#27
0
        public bool IsSubset(PowerSet <T> set2)
        {
            int k = 0;

            foreach (T a in set2.dict.Values)
            {
                if (dict.ContainsValue(a))
                {
                    k++;
                }
            }
            return(k == set2.dict.Count);
            // возвращает true, если set2 есть
            // подмножество текущего множества,
            // иначе false
        }
示例#28
0
        public bool IsSubset(PowerSet <T> set2)
        {
            // возвращает true, если set2 есть
            // подмножество текущего множества,
            // иначе false
            var currValues = WhereIsNotNull(slots);
            var set2Values = WhereIsNotNull(set2.slots);

            foreach (var set2Value in set2Values)
            {
                if (!currValues.Contains(set2Value))
                {
                    return(false);
                }
            }
            return(true);
        }
        public PowerSet <T> Intersection(PowerSet <T> set2)
        {
            // пересечение текущего множества и set2
            PowerSet <T> Intersected = new PowerSet <T>();

            if (capacity > 0 && set2.capacity > 0)
            {
                foreach (T item in slots)
                {
                    if (set2.Get(item))
                    {
                        Intersected.Put(item);
                    }
                }
            }
            return(Intersected);
        }
        /// <summary>
        /// вычисляет и возвращает новое множество - разницу текущего множества и множества set2
        /// </summary>
        /// <param name="set2">множество PowerSet<T> значений типа T</param>
        /// <returns>множество PowerSet<T> разница текущего множества и множества set2</returns>
        public PowerSet <T> Difference(PowerSet <T> set2)
        {
            PowerSet <T> difSet = new PowerSet <T>();

            foreach (T item in items)
            {
                // добавляем все элементы первого множества
                difSet.Put(item);
            }

            foreach (T item in set2.items)
            {
                // удаляем все элементы второго множества, которые присутствуют в первом
                difSet.Remove(item);
            }

            return(difSet);
        }