<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">APRIORI, A Depth First Implementation</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Walter</forename><forename type="middle">A</forename><surname>Kosters</surname></persName>
							<email>kosters@liacs.nl</email>
						</author>
						<author>
							<persName><forename type="first">Wim</forename><surname>Pijls</surname></persName>
							<email>pijls@few.eur.nl</email>
						</author>
						<author>
							<affiliation key="aff0">
								<orgName type="institution">Leiden Institute of Advanced Computer Science</orgName>
							</affiliation>
						</author>
						<author>
							<affiliation key="aff1">
								<orgName type="institution">Universiteit Leiden</orgName>
								<address>
									<postBox>P.O. Box 9512</postBox>
									<postCode>2300 RA</postCode>
									<settlement>Leiden</settlement>
									<country key="NL">The Netherlands</country>
								</address>
							</affiliation>
						</author>
						<author>
							<affiliation key="aff2">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Erasmus University</orgName>
								<address>
									<postBox>P.O. Box 1738</postBox>
									<postCode>3000 DR</postCode>
									<settlement>Rotterdam</settlement>
									<country key="NL">The Netherlands</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">APRIORI, A Depth First Implementation</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">CB0EBC4853A83B0F24A656A9EC85FF1A</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T05:54+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>We will discuss</head><p>, the depth first implementation of APRIORI as devised in 1999 (see <ref type="bibr" target="#b7">[8]</ref>). Given a database, this algorithm builds a trie in memory that contains all frequent itemsets, i.e., all sets that are contained in at least minsup transactions from the original database. Here minsup is a threshold value given in advance. In the trie, that is constructed by adding one item at a time, every path corresponds to a unique frequent itemset. We describe the algorithm in detail, derive theoretical formulas, and provide experiments.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>In this paper we discuss the depth first ( , see <ref type="bibr" target="#b7">[8]</ref>) implementation of APRIORI (see <ref type="bibr" target="#b0">[1]</ref>), one of the fastest known data mining algorithms to find all frequent itemsets in a large database, i.e., all sets that are contained in at least minsup transactions from the original database. Here minsup is a threshold value given in advance. There exist many implementations of APRIORI (see, e.g., <ref type="bibr" target="#b5">[6,</ref><ref type="bibr" target="#b10">11]</ref>). We would like to focus on algorithms that assume that the whole database fits in main memory, this often being the state of affairs; among these, and È(the FP-growth implementation of APRIORI, see <ref type="bibr" target="#b4">[5]</ref>) are the fastest. In most papers so far little attention has been given to theoretical complexity. In <ref type="bibr" target="#b2">[3,</ref><ref type="bibr" target="#b6">7]</ref> a theoretical basis for the analysis of these two algorithms was presented.</p><p>The depth first algorithm is a simple algorithm that proceeds as follows. After some preprocessing, which involves reading the database and a sorting of the single items with respect to their support, builds a trie in memory, where every path from the root downwards corresponds to a unique frequent itemset; in consecutive steps items are added to this trie one at a time. Both the database and the trie are kept in main memory, which might cause memory problems: both are usually very large, and in particular the trie gets much larger as the support threshold decreases. Finally the algorithm outputs all paths in the trie, i.e., all frequent itemsets. Note that once completed, the trie allows for fast itemset retrieval in the case of online processing.</p><p>We formerly had two implementations of the algorithm, one being time efficient, the other being memory efficient (called dftime.cc and dfmemory.cc, respectively), where the time efficient version could not handle low support thresholds. The newest version (called dffast.cc) combines them into one even faster implementation, and runs for all support thresholds.</p><p>In this paper we first describe , we then give some formal definitions and theoretical formulas, we discuss the program, provide experimental results, and conclude with some remarks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">The Algorithm</head><p>An appropriate data structure to store the frequent itemsets of a given database is a trie. As a running example in this section we use the dataset of Figure <ref type="figure" target="#fig_0">1</ref>. Each line represents a transaction. The trie of frequent patterns is shown in Figure <ref type="figure">2</ref>. The entries (or cells) in a node of a trie are usually called buckets, as is also the case for a hash-tree. Each bucket can be identified with its path to the root and hence with a unique frequent itemset. The example trie has 9 nodes and 18 buckets, representing 18 frequent itemsets. As an example, the frequent itemset can be seen as the leftmost path in the trie; and a set as is not present.</p><p>One of the oldest algorithms for finding frequent patterns is APRIORI, see <ref type="bibr" target="#b0">[1]</ref>. This algorithm successively finds all frequent 1-itemsets, all frequent 2-itemsets, all frequent 3itemsets, and so on. (A -itemset has items.) The frequent -itemsets are used to generate candidate  </p><formula xml:id="formula_0">A B C E F B E F C E F F F E F F F F Figure 2.</formula></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>An example of a trie (without support counts).</head><p>where the candidates are only known to have two frequent subsets with elements. After a pruning step, where candidates still having infrequent subsets are discarded, the support of the candidates is determined. The way APRIORI finds the frequent patterns implies that the trie is built layer by layer. First the nodes in the root (depth ¼) are constructed, next the trie nodes at depth 1 are constructed, and so on. So, APRIORI can be thought of as an algorithm that builds the pattern trie in a breadth first way. We propose an algorithm that builds the trie in a depth first way. We will explain the depth first construction of the trie using the dataset of Figure <ref type="figure" target="#fig_0">1</ref>. Note that the trie grows from right to left.</p><p>The algorithm proceeds as follows. In a preprocessing step, the support of each single item is counted and the infrequent items are eliminated. Let the Ò frequent items be denoted by ½ ¾ Ò . Next, the code from Figure <ref type="figure" target="#fig_1">3</ref> is executed.</p><p>(1) Ì the trie including only bucket Ò ;</p><p>(2) for Ñ Ò ½ downto 1 do</p><formula xml:id="formula_1">(3) Ì ¼ Ì; (4)</formula><p>Ì Ì ¼ with Ñ added to the left and a copy of Ì ¼ appended to Ñ ;</p><p>(5) Ë ÌÒÌ ¼ (= the subtrie rooted in Ñ );</p><p>(6) count´Ë Ñ µ; <ref type="bibr" target="#b6">(7)</ref> delete the infrequent itemsets from Ë;</p><p>(9) procedure count´Ë Ñ µ :: <ref type="bibr" target="#b9">(10)</ref> for every transaction Ø including item Ñ do <ref type="bibr" target="#b10">(11)</ref>  The procedure count´Ë Ñ µ determines the support of each itemset (bucket) in the subtrie Ë. This is achieved by a database pass, in which each transaction including item Ñ is considered. Any such transaction is one at a time "pushed" through Ë, where it only traverses a subtrie if it includes the root of this subtrie, meanwhile updating the support fields in the buckets. In the last paragraph from Section 4 a refinement of this part of the algorithm is presented.</p><formula xml:id="formula_2">for every itemset Á in Ë do (12) if Ø supports Á then Á.support •• ;</formula><p>On termination of the algorithm, Ì exactly contains the frequent itemsets.</p><p>Figure <ref type="figure" target="#fig_2">4</ref> illustrates the consecutive steps of the algorithm applied to our example. The single items surpassing the minimum support threshold 3 are ½ ¾ ¿ and . In the figure, the shape of Ì after each iteration of the for loop is shown. Also the infrequent itemsets to be deleted at the end of an iteration are mentioned. At the start of the iteration with index Ñ, the root of trie Ì consists of the 1-itemsets Ñ•½ Ò . (We denote a 1-itemset by the name of its only item, omitting curly braces and commas as in Figure <ref type="figure" target="#fig_0">1</ref> and Figure <ref type="figure" target="#fig_2">4</ref>.) By the statement in line (3) from Figure <ref type="figure" target="#fig_1">3</ref>, this trie may also be referred to as Ì ¼ . A new trie Ì is composed by adding bucket Ñ to the root and by appending a copy of Ì ¼ (the former value of Ì) to Ñ . The newly added buckets are the new candidates and they make up a subtrie Ë. In Figure <ref type="figure" target="#fig_2">4</ref> The number of iterations in the for loop is one less than the number of frequent 1-itemsets. Consequently, the number of database passes is one less than the number of frequent 1-itemsets. This causes the algorithm to be tractable only if the database under consideration is memory-resident. Given the present-day memory sizes, this is not a real constraint any more.</p><p>As stated above, our algorithm has a preprocessing step which counts the support for each single item. After this preprocessing step, the items may be re-ordered. The most favorable execution time is achieved if we order the items by increasing frequency (see Section 3 for a more formal motivation). It is better to have low support at the top of the deeper side (to the left bottom) of the trie and hence, high support at the top of the shallow part (to the upper right) of the trie.</p><p>We may distinguish between "dense" data sets and "sparse" datasets. A dense dataset has many frequent patterns of large size and high support, as is the case for test sets such as chess and mushroom (see <ref type="bibr">Section 5)</ref>. In those datasets, many transactions are similar to each other. Datasets with mainly short patterns are called sparse. Longer patterns may exist, but with relatively small support. Real-world transaction databases of supermarkets mostly belong to this category. Also the synthetic datasets from Section 5 have similar properties: interesting support thresholds are much lower than in the dense case.</p><p>Algorithms for finding frequent patterns may be divided into two types: algorithms respectively with and without candidate generation Any APRIORI-like instance belongs to the first type. Eclat (see <ref type="bibr" target="#b8">[9]</ref>) may also be considered as an instance of this type. The FP-growth algorithm Èfrom <ref type="bibr" target="#b4">[5]</ref> is the best-known instance of the second type (though one can also defend the point of view that it does generate candidates). For dense datasets, Èperforms better than candidate generating algorithms. Èstores the dataset in a way that is very efficient especially when the dataset has many similar transactions. In case of algorithms that do apply candidate generation, dense sets produce a large number of candidates. Since each new candidate has to be related to each transaction, the database passes take a lot of time. However, for sparse datasets, candidate generation is a very suitable method for finding frequent patterns. To our experience, the instances of the APRIORI family are very useful when searching transaction databases. According to the results in <ref type="bibr" target="#b6">[7]</ref> the depth first algorithm outperforms FPgrowth Èin the synthetic transaction sets (see Section 5</p><p>for a description of these sets). Finally, note that technically speaking is not a full implementation of APRIORI, since every candidate itemset is known to have only one frequent subset (resulting from the part of the trie which has already been completed) instead of two. Apart from this, its underlying candidate generation mechanism strongly resembles the one from APRI-ORI.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Theoretical Complexity</head><p>Let Ñ denote the number of transactions (also called customers), and let Ò denote the number of products (also called items). Usually Ñ is much larger than Ò. For a nonempty itemset ½ ¾ Ò we define: ¯×ÙÔÔ´ µ is the support of : the number of customers that buy all products from (and possibly more), or equivalently the number of transactions that contain ;</p><p>¯×Ñ´ µ is the smallest number in ; ¯Ð ´ µ is the largest number in .</p><p>In line with this we let ×ÙÔÔ´ µ Ñ. We also put</p><formula xml:id="formula_3">Ð ´ µ ¼ and ×Ñ´ µ Ò • ½ . A set ½ ¾ Ò is called fre- quent if ×ÙÔÔ´ µ</formula><p>Ñ Ò×ÙÔ, where the so-called support threshold minsup is a fixed number given in advance.</p><p>We assume every 1-itemset to be frequent; this can be effected by the first step of the algorithms we are looking at, which might be considered as preprocessing.</p><p>A "database query" is defined as a question of the form "Does customer buy product È?" (or "Does transaction Ì has item Á?"), posed to the original database. Note that we have ÑÒ database queries in the "preprocessing" phase in which the supports of the 1-itemsets are computed and ordered: every field of the database is inspected once. (By the way, the sorting, in which the items are assigned the numbers ½ ¾ Ò , takes Ç´Ò ÐÓ Òµ time.) The number of database queries for equals:</p><formula xml:id="formula_4">Ñ´Ò ½µ• Ö ÕÙ ÒØ ×Ñ´ µ ½ ½ ×ÙÔÔ´ Ò Ð ´ µ µ (1)</formula><p>For a proof, see <ref type="bibr" target="#b2">[3]</ref>. It relies on the fact that in order for a node to occur in the trie the path to it (except for the root) should be frequent, and on the observation that this particular node is "questioned" every time a transaction follows this same path. In <ref type="bibr" target="#b2">[3]</ref> a simple version of Èis described in a similar style, leading to</p><formula xml:id="formula_5">Ö ÕÙ ÒØ Ò Ð ´ µ•½ Ò Ð ´ µ Ö ÕÙ ÒØ ×ÙÔÔ´ µ<label>(2)</label></formula><p>database queries in "local databases" (FP-trees), except for the preprocessing phase. Note the extra condition on the inner summation (which is "good" for È : we have less summands there), while on the other hand the summands are larger (which is "good" for : we have a smaller contribution there).</p><p>It makes also sense to look at the total number of nodes of the trie during its construction, which is connected to the effort of maintaining and using the datastructures. Counting each trie-node with the number of buckets it contains, the total is computed to be:</p><formula xml:id="formula_6">Ò • Ö ÕÙ ÒØ ×Ñ´ µ ½ ½ ½ Ö ÕÙ ÒØ ×Ñ´ µ ½ (3)</formula><p>When the trie is finally ready the number of remaining buckets equals the number of frequent sets, each item in a node being the end of the path that represents the corresponding itemset.</p><p>Notice that the complexity heavily depends on the sorting order of the items at the top level. It turns out that an increasing order of items is beneficial here. This is suggested by the contribution of the 1-itemsets in Equation ( <ref type="formula">1</ref>):</p><formula xml:id="formula_7">Ò ½ ´Ò µ ×ÙÔÔ´ µ (<label>4</label></formula><formula xml:id="formula_8">)</formula><p>which happens to be minimal in that case. This 1-itemset contribution turns out to be the same for both and È : see <ref type="bibr" target="#b2">[3,</ref><ref type="bibr" target="#b6">7]</ref>, where also results for Èare presented in more detail.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Implementation Issues</head><p>In this section we discuss some implementation details of our program. As mentioned in Section 2, the database is traversed many times. It is therefore necessary that the database is memory-resident. Fortunately, only the occurrences of frequent items need to be stored. The database is represented by a two-dimensional boolean array. For efficiency reasons, one array entry corresponds to one bit. Since the function count in the algorithm considers the database transaction by transaction, a horizontal layout is chosen, cf. <ref type="bibr" target="#b3">[4]</ref>.</p><p>We have four preprocessing steps before the algorithm of Section 2 actually starts.</p><p>according to the information gathered in step 2. For constructing the other buckets, only transactions with at least two frequent items are relevant. In this step, we count the relevant transactions.</p><p>4 During this step the databases is stored into a twodimensional array with horizontal layout. Each item is given a new number, according to its rank in the frequency order. The length of the array equals the result of step 3; the width is determined by the number of frequent items.</p><p>After this preparatory work, which in practice usually takes a few seconds, the code as described in Section 2 is executed. The cells of the root are constructed using the result of initial step 2.</p><p>In line (12) from Figure <ref type="figure" target="#fig_1">3</ref> in Section 2, backtracking is applied to inspect each path È of Ë. Inspecting a path È is aborted as soon as an item with outside the current transaction Ø is found. Obviously, processing one transaction during the count procedure is a relatively expensive task, which is unfortunately inevitable, whichever version of APRIORI is used.</p><p>As mentioned in the introduction, we used to have two implementations, one being time efficient, the other being memory efficient. These two have been used in the overall FIMI'03 comparisons. The newest implementation (called dffast.cc) combines these versions by using the following refinement. Instead of appending a copy Ì ¼ of Ì to Ñ (see Figure <ref type="figure" target="#fig_1">3</ref> in Section 2), first the counting is done in auxiliary fields in the original Ì, after which only the frequent buckets are copied underneath Ñ . This makes the deletion of infrequent itemsets (line (7) from Figure <ref type="figure" target="#fig_1">3</ref>) unnecessary and leads to better memory management. Another improvement might be achieved by using more auxiliary fields while adding two root items simultaneously in each iteration, thereby halving the number of database passes at the cost of more bookkeeping.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Experiments</head><p>Using the relatively small database chess (342 kB, with 3,196 transactions; available from the FIMI'03 website at http://fimi.cs.helsinki.fi/testdata.html), the database mushroom (570 kB, with 8,124 transactions; also available from the FIMI'03 website) and the well-known IBM-Almaden synthetic databases (see <ref type="bibr" target="#b1">[2]</ref>) we shall examine the complexity of the algorithm. These databases have either few, but coherent records (chess and mushroom), or many records (the synthetic databases). The parameters for generating a synthetic database are the number of transactions (in thousands), the average transaction size Ì and the average length Á of so-called maximal potentially large itemsets. The number of items was set to AE ½ ¼¼¼, following the design in <ref type="bibr" target="#b1">[2]</ref>. We use T10I4D100K (4.0 MB) and T40I10D100K (15.5 MB), both also available from the FIMI'03 website mentioned above; they both contain 100,000 transactions. The following statistics are plotted in the graphs: the execution time in seconds of the algorithm (see Section 4), and the total number of frequent itemsets: in all figures the corresponding axis is on the right hand side and scales 0-5,500,000 (0-8,000,000 for Ì½¼Á ½¼¼Ã). The execution time excludes preprocessing: in this phase the database is read three times in order to detect the frequent items (see before); also excluded is the time needed to print the resulting itemsets. These actions together usually only take a few seconds. The number of frequent 1-itemsets (Ò from the previous sections, where we assumed all 1-itemsets to be frequent) has range 31-39 for the experiments on the database chess, 54-76 for mushroom, 844-869 for T10I4D100K and 610-862 for T40I10D100K. Note the very high support thresholds for mushroom (at least 5%) and chess (at least 44%); for T10I4D100K a support threshold as low as 0.003% was even feasible.</p><p>The largest output files produced are of size 110.6 MB (chess, minsup = 1,400, having 3,771,728 frequent sets with 13 frequent 17-itemsets), 121.5 MB (mushroom, minsup = 400, having 3,457,747 frequent sets with 24 frequent 17-itemsets), 131.1 MB (T10I4D100K, minsup = 3, having 6,169,854 frequent sets with 30 frequent 13-itemsets and 1 frequent 14-itemset) and 195.9 MB (T40I10D100K, minsup = 300, having 5,058,313 frequent sets, with 21 frequent 19-itemsets and 1 frequent 20-itemset). The final trie in the T40I10D100K case occupies approximately 65 MB of memory -the output file in this case being 3 times as large.</p><p>Note that the 3,457,747 sets for the chess database with minsup = 1,400 require 829 seconds to find, whereas the 3,771,728 frequent itemsets for mushroom with minsup = 400 take 158 seconds -differing approximately a factor 5 in time. This difference in runtime is probably caused by the difference in the absolute minsup value. Each cell corresponding to a frequent itemset is visited at least 1400 times in the former case against 400 times in the latter case. A similar phenomenon is observed when comparing T40I10D100K with absolute minsup value 300 and T10I4D100K with minsup = 3: this takes 378 versus 88 seconds. Although the outputs have the same orders of magnitude, the runtimes differ substantially. We see that, besides the number of frequent itemsets and the sizes of these sets, the absolute minsup value is a major factor determining the runtime.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="6">Conclusions</head><p>In this paper, we addressed , a depth first implementation of APRIORI. To our experience, competes with any other well-known algorithm, especially when applied to large databases with transactions.</p><p>Storing the database in the primary memory is no longer a problem. On the other hand, storing the candidates causes trouble in situations, where a dense database is considered with a small support threshold. This is the case for any algorithm using candidates. Therefore, it would be desirable to look for a method which stores candidates in secondary memory. This is an obvious topic for future research. To our knowledge, Èis the only algorithm that can cope with memory limitations. However, for real world retail databases this algorithm is surpassed by , as we showed in <ref type="bibr" target="#b6">[7]</ref>. Other optimizations might also be possible. Besides improving the C •• code, ideas from, e.g., <ref type="bibr" target="#b9">[10]</ref> on diffsets with vertical layouts might be used.</p><p>Our conclusion is that is a simple, practical, straightforward and fast algorithm for finding all frequent itemsets.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 .</head><label>1</label><figDesc>Figure 1. An example of a dataset along with its frequent itemsets.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 3 .</head><label>3</label><figDesc>Figure 3. The algorithm.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>FFigure 4 .</head><label>4</label><figDesc>Figure 4. Illustrating the algorithm.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Figure 5 .Figure 6 .</head><label>56</label><figDesc>Figure 5. Experimental results for database ××.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Figure 7 .Figure 8 .</head><label>78</label><figDesc>Figure 7. Experimental results for database Ì½¼Á ½¼¼Ã.</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">The range of the item values is determined. This is necessary, because some test sets, e.g., the BMS-WebView sets, have only values½¼ ¼¼¼.  </note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">2 This is an essential initial step. First, for each item the support is counted. Next, the frequent items are selected and sorted by frequency. This process is relevant, since the frequency order also prescribes the order in the root of the trie, as stated before. The sorted frequent items along with their supports are retained in an</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">array.3 If a transaction has zero or one frequent item, it needs not to be stored into the memory-resident representation of the database. The root of the trie is constructed</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Fast discovery of association rules</title>
		<author>
			<persName><forename type="first">R</forename><surname>Agrawal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Mannila</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Srikant</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Toivonen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">I</forename><surname>Verkamo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Advances in Knowledge Discovery and Data Mining</title>
				<editor>
			<persName><forename type="first">U</forename><forename type="middle">M</forename><surname>Fayyad</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">G</forename><surname>Piatetsky-Shapiro</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">P</forename><surname>Smyth</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">R</forename><surname>Uthurusamy</surname></persName>
		</editor>
		<imprint>
			<publisher>AAAI/MIT Press</publisher>
			<date type="published" when="1996">1996</date>
			<biblScope unit="page" from="307" to="328" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Fast algorithms for mining association rules</title>
		<author>
			<persName><forename type="first">R</forename><surname>Agrawal</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Srikant</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings 20th International Conference on Very Large Data Bases, VLDB</title>
				<editor>
			<persName><forename type="first">J</forename><forename type="middle">B</forename><surname>Bocca</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Jarke</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">C</forename><surname>Zaniolo</surname></persName>
		</editor>
		<meeting>20th International Conference on Very Large Data Bases, VLDB</meeting>
		<imprint>
			<publisher>Morgan Kaufmann</publisher>
			<date type="published" when="1994">1994</date>
			<biblScope unit="page" from="487" to="499" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">A theoretical and practical comparison of depth first and FP-growth implementations of Apriori</title>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">M</forename><surname>De Graaf</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">A</forename><surname>Kosters</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Pijls</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Popova</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Fourteenth Belgium-Netherlands Artificial Intelligence Conference (BNAIC 2002)</title>
				<editor>
			<persName><forename type="first">H</forename><surname>Blockeel</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Denecker</surname></persName>
		</editor>
		<meeting>the Fourteenth Belgium-Netherlands Artificial Intelligence Conference (BNAIC 2002)</meeting>
		<imprint>
			<date type="published" when="2002">2002</date>
			<biblScope unit="page" from="115" to="122" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Survey on frequent pattern mining</title>
		<author>
			<persName><forename type="first">B</forename><surname>Goethals</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">ØØÔ ÛÛÛ × Ð× Ò Ù -Ó Ø Ð× ÔÙ</title>
				<meeting><address><addrLine>Helsinki</addrLine></address></meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
	<note type="report_type">Ø ÓÒ× ×ÙÖÚ Ý Ô×</note>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Mining frequent patterns without candidate generation</title>
		<author>
			<persName><forename type="first">J</forename><surname>Han</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Pei</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Y</forename><surname>Yin</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings 2000 ACM SIGMOD International Conference on Management of Data (SIGMOD&apos;00)</title>
				<meeting>2000 ACM SIGMOD International Conference on Management of Data (SIGMOD&apos;00)</meeting>
		<imprint>
			<date type="published" when="2000">2000</date>
			<biblScope unit="page" from="1" to="12" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Mining association rules: Deriving a superior algorithm by analyzing today&apos;s approaches</title>
		<author>
			<persName><forename type="first">J</forename><surname>Hipp</surname></persName>
		</author>
		<author>
			<persName><forename type="first">U</forename><surname>Günther</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Nakhaeizadeh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Principles of Data Mining and Knowledge Discovery, Proceedings of the 4th European Conference (PKDD 2000)</title>
		<title level="s">Springer Lecture Notes in Computer Science</title>
		<editor>
			<persName><forename type="first">D</forename><forename type="middle">A</forename><surname>Zighed</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Komorowski</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">J</forename><surname>Żytkov</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer Verlag</publisher>
			<date type="published" when="1910">1910. 2000</date>
			<biblScope unit="page" from="159" to="168" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Complexity analysis of depth first and FP-growth implementations of Apriori</title>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">A</forename><surname>Kosters</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Pijls</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Popova</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">itors, Machine Learning and Data Mining in Pattern Recognition</title>
		<title level="s">Springer Lecture Notes in Artificial Intelligence</title>
		<editor>
			<persName><forename type="first">P</forename><surname>Perner</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">A</forename><surname>Rosenfeld</surname></persName>
		</editor>
		<imprint>
			<publisher>Springer Verlag</publisher>
			<date type="published" when="2003">2003</date>
			<biblScope unit="volume">2734</biblScope>
			<biblScope unit="page" from="284" to="292" />
		</imprint>
	</monogr>
	<note>Proceedings MLDM 2003</note>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Mining frequent itemsets in memory-resident databases</title>
		<author>
			<persName><forename type="first">W</forename><surname>Pijls</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">C</forename><surname>Bioch</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Eleventh Belgium-Netherlands Conference on Artificial Intelligence (BNAIC1999)</title>
				<editor>
			<persName><forename type="first">E</forename><surname>Postma</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">M</forename><surname>Gyssens</surname></persName>
		</editor>
		<meeting>the Eleventh Belgium-Netherlands Conference on Artificial Intelligence (BNAIC1999)</meeting>
		<imprint>
			<date type="published" when="1999">1999</date>
			<biblScope unit="page" from="75" to="82" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Scalable algorithms for association mining</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">J</forename><surname>Zaki</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Knowledge and Data Engineering</title>
		<imprint>
			<biblScope unit="volume">12</biblScope>
			<biblScope unit="page" from="372" to="390" />
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Fast vertical mining using diffsets</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">J</forename><surname>Zaki</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Gouda</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings 9th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining</title>
				<meeting>9th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining</meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Real world performance of association rule algorithms</title>
		<author>
			<persName><forename type="first">Z</forename><surname>Zheng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Kohavi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Mason</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the Seventh ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD-2001)</title>
				<editor>
			<persName><forename type="first">F</forename><surname>Provost</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">R</forename><surname>Srikant</surname></persName>
		</editor>
		<meeting>the Seventh ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD-2001)</meeting>
		<imprint>
			<date type="published" when="2001">2001</date>
			<biblScope unit="page" from="401" to="406" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
