Beispiel #1
0
 public ItemsTransactionList CombineItemsTransactionList(ItemsTransactionList itemsTransactionList1,
                                                         ItemsTransactionList itemsTransactionList2)
 {
     itemsTransactionList1.ItemList.AddItemsOfTransaction(new Transaction(
                                                              itemsTransactionList2.ItemList));
     foreach (Transaction transaction in itemsTransactionList1.Transactions)
     {
         if (!itemsTransactionList2.Transactions.Contains(transaction))
         {
             itemsTransactionList1.Transactions.Remove(transaction);
         }
     }
     return(itemsTransactionList1);
 }
Beispiel #2
0
        private List <ItemsTransactionList> GenerateCandidates(List <ItemsTransactionList> items, int transactionLength)
        {
            var result = new List <ItemsTransactionList>();
            var x      = GetCombinations(items.AsEnumerable(), transactionLength + 1);

            foreach (var enumerable in x)
            {
                var  itemsTransactionList = new ItemsTransactionList();
                bool first = true;
                foreach (var item in enumerable)
                {
                    foreach (Item itemListItem in item.ItemList.Items)
                    {
                        itemsTransactionList.ItemList.Items.Add(itemListItem);
                    }
                    if (first)
                    {
                        foreach (Transaction transaction in item.Transactions)
                        {
                            itemsTransactionList.Transactions.Add(transaction);
                        }
                    }
                    else
                    {
                        List <Transaction> tmpTransactionList = new List <Transaction>();
                        foreach (Transaction transaction in itemsTransactionList.Transactions)
                        {
                            if (!item.Transactions.Contains(transaction))
                            {
                                tmpTransactionList.Add(transaction);
                            }
                        }
                        foreach (Transaction transaction in tmpTransactionList)
                        {
                            itemsTransactionList.Transactions.Remove(transaction);
                        }
                    }
                    first = false;
                }
                if (((double)itemsTransactionList.Transactions.Count / (double)TransactionDatabase.Transactions.Count) >= MinimumSupport)
                {
                    result.Add(itemsTransactionList);
                }
            }
            return(result);
        }
Beispiel #3
0
        public void Run()
        {
            TransactionDatabase.CreateUniqueItemsList();
            SupportedTransactionsList   = new HashSet <Transaction>();
            UnSupportedTransactionsList = new HashSet <Transaction>();
            List <ItemsTransactionList> uniqueItemsTransactionLists     = new List <ItemsTransactionList>();
            List <ItemsTransactionList> tempUniqueItemsTransactionLists = new List <ItemsTransactionList>();

            foreach (Item uniqueItem in TransactionDatabase.UniqueItems.Items)
            {
                ItemsTransactionList itemsTransactionList = new ItemsTransactionList();
                itemsTransactionList.ItemList = new ItemList();
                itemsTransactionList.ItemList.Items.Add(uniqueItem);
                itemsTransactionList.AddTransactionsToList(GetTransactionsContainsItemList(itemsTransactionList.ItemList));
                if (TransactionDatabase.GetSupportOfTransaction(new Transaction(uniqueItem)) >= MinimumSupport)
                {
                    ItemsTransactionLists.Add(itemsTransactionList);
                    uniqueItemsTransactionLists.Add(itemsTransactionList);
                    var transaction = new Transaction(uniqueItem);
                    if (CalculateSupport)
                    {
                        transaction.Support = TransactionDatabase.GetSupportOfTransaction(transaction);
                    }
                    SupportedTransactionsList.Add(transaction);
                }
            }

            int                maxItemCount          = 1;
            HashSet <Item>     temporaryItems        = new HashSet <Item>();
            List <Transaction> temporaryTransactions = new List <Transaction>();

            while (true)
            {
                temporaryItems.Clear();
                temporaryTransactions.Clear();
                tempUniqueItemsTransactionLists.Clear();
                List <ItemsTransactionList> tmpItemsTransactionLists = new List <ItemsTransactionList>();

                foreach (ItemsTransactionList itemsTransactionList in ItemsTransactionLists)
                {
                    if (itemsTransactionList.ItemList.Items.Count == maxItemCount)
                    {
                        tmpItemsTransactionLists.Add(itemsTransactionList);
                    }
                }
                foreach (ItemsTransactionList tmpItemsTransactionList in tmpItemsTransactionLists)
                {
                    foreach (Item item in tmpItemsTransactionList.ItemList.Items)
                    {
                        temporaryItems.Add(item);
                    }
                }

                foreach (ItemsTransactionList itemsTransactionList in uniqueItemsTransactionLists)
                {
                    foreach (Item temporaryItem in temporaryItems)
                    {
                        if (itemsTransactionList.ItemList.Items.First() == temporaryItem)
                        {
                            tempUniqueItemsTransactionLists.Add(itemsTransactionList);
                        }
                    }
                }

                List <ItemsTransactionList> candidateTransactions = GenerateCandidates(tempUniqueItemsTransactionLists.ToList(), maxItemCount);
                if (candidateTransactions.Count == 0)
                {
                    break;
                }
                foreach (ItemsTransactionList tmpItemsTransactionList in candidateTransactions)
                {
                    ItemsTransactionLists.Add(tmpItemsTransactionList);
                    var transaction = new Transaction(tmpItemsTransactionList.ItemList);
                    if (CalculateSupport)
                    {
                        transaction.Support = TransactionDatabase.GetSupportOfTransaction(transaction);
                    }
                    SupportedTransactionsList.Add(transaction);
                }
                maxItemCount++;
            }
        }