public static List<Birliktelik> BirlitelikBul(VeriToplami db, VeriToplami L, double GuvenEsik)
        {
            List<Birliktelik> tumKurallarListesi = new List<Birliktelik>();

            foreach (Veri veriler in L)
            {
                VeriToplami liste = Bit.AltKumeBul(veriler, 0);
                foreach (Veri altkume in liste)
                {
                    double Guven = (db.DestekBul(veriler) / db.DestekBul(altkume)) * 100.0;

                    if (Guven >= GuvenEsik)
                    {
                        Birliktelik kural = new Birliktelik();
                        kural.X.AddRange(altkume);
                        kural.Y.AddRange(veriler.Remove(altkume));
                        kural.Destek = db.DestekBul(veriler);
                        kural.Guven = Guven;
                        if (kural.X.Count > 0 && kural.Y.Count > 0)
                        {
                            tumKurallarListesi.Add(kural);
                        }
                    }
                }
            }
            return (tumKurallarListesi);
        }
        public static VeriToplami AltKumeBul(Veri veriler, int n)
        {
            VeriToplami liste = new VeriToplami();

            int AltKumeSayisi = (int)Math.Pow(2, Convert.ToInt32(veriler.Count));
            for (int i = 0; i < AltKumeSayisi; i++)
            {
                if (n == 0 || GetOnCount(i, veriler.Count) == n)
                {
                    string binary = DecimalToBinary(i, veriler.Count);

                    Veri altkume = new Veri();
                    for (int bitIndex = 0; bitIndex < veriler.Count; bitIndex++)
                    {
                        if (binary[bitIndex] == '1')
                        {
                            altkume.Add(veriler[bitIndex]);
                        }
                    }
                    //Console.WriteLine("Alt küme sayısı " + altkume.Count());
                    //Console.WriteLine(altkume);

                    liste.Add(altkume);
                }

            }

            return liste;
        }
        //apiori algoritması.............................
        public static VeriToplami Apiori_1(VeriToplami db, double mindestek)
        {
            Veri I = db.DistincYap();
            VeriToplami L = new VeriToplami();
            VeriToplami Li = new VeriToplami();
            VeriToplami Ci = new VeriToplami();

            foreach (string item in I)
            {
                Ci.Add(new Veri() { item });
            }
            //ikinci terasyon kümeleme
            int k = 2;
            while (Ci.Count != 0)
            {
                Li.Clear();
                foreach (Veri veriler in Ci)
                {
                    veriler.Destek = db.DestekBul(veriler);

                    if (veriler.Destek >= mindestek)
                    {
                        Li.Add(veriler);
                        L.Add(veriler);
                    }
                }

                Ci.Clear();
                Ci.AddRange(Bit.AltKumeBul(Li.DistincYap(), k));

                k = k + 1;
            }

            return L;
        }