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); }
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); }
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++; } }