دنباله‌کاوی یکی از مسائل مهم و با استفاده‌های گسترده در داده‌کاوی است.
دنباله‌کاوی به این دلیل مسئله دشواری است که برای آن نیاز داریم تعداد زیادی زیردنباله تولید کنیم و آن‌ها را آزمایش کنیم.
تعداد زیادی از الگوریتم‌های دنباله‌کاوی مانند الگوریتم آپریوری از یک روش ساخت کاندید و آزمایش استفاده می‌کنند اما این روش برای پایگاه‌داده‌های شامل الگوهای متعدد یا زیاد مناسب و بهینه نیست.

پوشش پیشوند(به انگلیسی: prefixspan) یک الگوریتم بهینه برای انجام دنباله‌کاوی است.
پوشش پیشوند یک الگوریتم تصویر محور است که از روش گسترش الگو استفاده می‌کند.
در این الگوریتم بصورت بازگشتی یک پایگاه‌داده به تعدادی پایگاه‌داده تصویرشده کوچکتر تبدیل می‌شود و الگوها برای هر پایگاه‌داده گسترش می‌یابند و برای هر کدام از پایگاه‌داده‌های کوچکتر الگوهای پرتکرار پیدا می‌شوند.

صورت مسئله
----------

{\displaystyle I=\{i\_{1},i\_{2},\cdots ,i\_{n}\}}
مجموعه آیتم‌ها است. یک مجموعه‌آیتم زیرمجموعه‌ای از مجموعه
I
است.
دنباله یک دنباله از مجموعه‌آیتم‌ها مانند {\displaystyle <s\_{1},\cdots ,s\_{j}>} است که هرکدام از {\displaystyle s\_{i}}ها یک مجموعه‌آیتم هستند.
به هرکدام از {\displaystyle s\_{i}}ها یک عضو از دنباله می‌گوییم که به‌صورت {\displaystyle (x\_{1},\cdots ,x\_{m})} است که هرکدام از x\_iها یک آیتم هستند.

به دنباله {\displaystyle \alpha =<a\_{1},\cdots ,a\_{n}>} زیردنباله‌ای از {\displaystyle \beta =<b\_{1},\cdots ,b\_{m}>} می‌گوییم اگر
{\displaystyle 1\leq j\_{1}<\cdots <j\_{n}\leq m} موجود باشد که برای هر {\displaystyle 1\leq i\leq n} مجموعه‌آیتم a\_{i} زیرمجموعه‌ای از
{\displaystyle b\_{j\_{i}}} باشد و آنرا با علامت {\displaystyle \alpha \sqsubseteq \beta } نشان می‌دهیم.

اگر S مجموعه‌ای از دنباله‌ها باشد تعریف می‌کنیم:

{\displaystyle Support\_{S}(\alpha )=|\{x|x\in S\land \alpha \sqsubseteq x\}|}

دنباله‌کاوی عددی به عنوان minSupport و مجموعه‌ای مانند S از دنباله‌ها دریافت می‌کند و همه دنباله‌های \alpha  را می‌یابد که:

{\displaystyle Support\_{S}(\alpha )\geq minSupport}

### مثال

اگر minSupport برابر ۲ باشد و اعضای S بترتیب {\displaystyle <(a)(abc)(ac)(d)(cf)>} و {\displaystyle <(ad)(c)(bc)(ae)>} و
{\displaystyle <(ef)(ab)(df)(c)(b)>} باشد.
دنباله {\displaystyle <(a)(abc)(ac)(d)(cf)>} شامل پنج عضو (a) و (abc) و (ac) و (d) و (cf) است که هرکدام یک مجموعه‌آیتم هستند.

در اینصورت {\displaystyle <(ab)(c)>} یک دنباله جواب است چون زیردنباله‌ای از دنباله‌های اول و سوم S است.

الگوریتم
--------

### پیشوند و تصویر و پسوند

در ابتدا فرض می‌کنیم همه آیتم‌های آیتم‌مجموعه‌ها بصورت مرتب شده هستند.
به دنباله {\displaystyle \beta =<e\_{1},\cdots ,e\_{m}>} یک پیشوند از دنباله {\displaystyle \alpha =<i\_{1},\cdots ,i\_{n}>} می‌گوییم اگر برای هر
{\displaystyle j\leq m-1} داشته باشیم {\displaystyle i\_{j}=e\_{j}} و {\displaystyle e\_{m}\subseteq i\_{m}} و همچنین آیتم‌های
{\displaystyle i\_{m}-e\_{m}} همگی بصورت الفبایی بعد از آیتم‌های {\displaystyle e\_{m}} باشند.

اگر \beta  زیردنباله‌ای از \alpha  باشد تصویر \alpha  با پیشوند \beta  زیردنباله
{\displaystyle \alpha '} از \alpha  با شرایط زیر است:

1. \beta  پیشوندی از {\displaystyle \alpha '} باشد.
2. {\displaystyle \alpha '} بیشینه باشد. یعنی هیچ {\displaystyle \alpha '\sqsubseteq \alpha ''\sqsubseteq \alpha ,\alpha '\neq \alpha ''} موجود نباشد که \beta  پیشوندی از {\displaystyle \alpha ''} باشد.

اگر {\displaystyle \beta =<e\_{1},\cdots ,e\_{m-1},e'\_{m}>} پیشوندی از {\displaystyle \alpha =<e\_{1},\cdots ,e\_{n}>} باشد به دنباله
{\displaystyle \gamma =<e''\_{m},e\_{m+1},\cdots ,e\_{n}>} پسوند \alpha  نسبت به \beta  می‌گوییم که
{\displaystyle e''\_{m}=e\_{m}-e'\_{m}}.

به عنوان مثال {\displaystyle (a)(a)} پیشوندی از {\displaystyle (a)(abc)} است و پسوند مربوط به آن {\displaystyle (-bc)} است.

### صورت الگوریتم

الگوریتم از این گذاره استفاده می‌کند که اگر {\displaystyle \{x\_{1},\cdots ,x\_{n}\}} الگوهای پرتکرار با طول i باشند الگوهای به طول i + 1 را می‌توان به n دسته تقسیم کرد که اعضای دسته jام همگی دارای پیشوند x\_{j} باشند.
با استفاده از گزاره قبل الگوریتم از سه مرحله تشکیل شده‌است:

1. پیدا کردن همه الگوهای پرتکرار که طول آنها j است (آنهارا {\displaystyle x\_{1},\dots ,x\_{m}} بنامید).
2. تقسیم فضای مسئله از این طریق که همه دنباله‌هایی که x\_i زیردنباله‌ای از آن‌ها است را به x\_i منتسب می‌کنیم.
3. برای هر دنباله x\_i پایگاه‌داده تصویر شده را ایجاد می‌کنیم و بصورت بازگشتی به یافتن الگوهای پرتکرار می‌گردیم. لازم است ذکر شود پایگاه‌داده تصویر شده از تصویر x\_i روی همه دنباله‌های منتسب شده به x\_i بدست می‌آید.

### شبه کد

```
**Algorithm** (PrefixSpan) Prefix-projected sequential pattern mining
**Input**: Database S, min_support
**Output**: The complete set of sequential petterns
**Method**: call PrefixSpan(<>, 0, S)
 **Subroutine** PrefixSpan({\displaystyle \alpha ,l,S|\_{\alpha }})
 The parameters are
 1. \alpha  is sequential pattern
 2. l is length of \alpha 
 3. {\displaystyle S|\_{\alpha }} is \alpha -projected database if {\displaystyle \alpha \neq <>}, otherwise, is the sequence database S
 **Method** :
 1. Scan {\displaystyle S|\_{\alpha }} once, find each frequent item, b, such that b can be assembled to the last element of \alpha  to form a sequential
 pattern.
 2. For each frequent item b, append it to \alpha  to form a sequential pattern {\displaystyle \alpha '}, and output {\displaystyle \alpha '}.
 3. For each {\displaystyle \alpha '}, construct {\displaystyle \alpha '}-projected database {\displaystyle S|\_{\alpha '}}, and call PrefixSpan({\displaystyle \alpha ',l+1,S|\_{\alpha '}}).
```

### مثال

فرض کنید مجموعه دنباله‌ها بصورت زیر باشد:

{\displaystyle S=\{<(a)(abc)(d)>,<(ad)(c)(bc),<(e)(g)(af)>\}}

و مقدار min\_support برابر ۲ باشد.
ابتدا دنباله‌های پرتکرار با طول ۱ را می‌یابیم که بوضوح با در نظر گرفتن تکرار آیتم‌ها ۴ دنباله {\displaystyle <(a)>,<(b)>,<(c)>,<(d)>} قابل قبول هستند. حال باید پایگاه‌داده تصویرشده {\displaystyle <(a)>} را پیدا کنیم که چون {\displaystyle <(a)>} زیردنباله‌ای از سه دنباله هست پایگاه‌داده بصورت زیر می‌شود.

{\displaystyle S|\_{\alpha }=\{<(abc)(d)>,<(-d)(c)(bc)>,<(-f)>\}}

حال با در نظر گرفتن آیتم‌هایی که حداقل دوبار در {\displaystyle S|\_{\alpha }} تکرار شده‌اند در این مرحله دو دنباله به طول دو {\displaystyle <(a)(b)>,<(a)(c)>} پیدا می‌شود. با ادامه انجام این روند همه الگوهای پرتکرار یافت می‌شوند:

frequent\_patterns = {\displaystyle \{<(a)>,<(b)>,<(c)>,<(d)>,<(a)(b)>,<(a)(c)>,<(a)(bc)>,<(bc)>\}}

بهبود دهی
---------

اگر اندازه پایگاه داده های ساخته‌شده کوچک شود به افزایش کارایی الگوریتم کمک می‌کند. به این منظور هنگام ساخت هر پایگاه‌داده تصویری از یک هرس داده‌ها با استفاده از بررسی‌های الگوریتم آپریوری استفاده می‌کنیم. به این روش تصویر دولایه(bi level projection) می‌گویند.

آزمایش‌ها نشان داده‌است که بیشتر هزینه این الگوریتم صرف ساخت پایگاه‌داده‌ها می‌شود و اگر اندازه پایگاه داده بزرگ باشد لازم است تعداد زیادی پایگاه‌داده تصویری تولید شود که هزینه زیادی دارد. به این منظور بجای ساخت فیزیکی پایگاه‌داده‌ها برای هر دنباله یک شماره در نظر می‌گیریم و در هر پایگاه‌داده تنها شماره دنباله‌ها و اندیس مکان شروع پسوند را نگه می‌داریم که باعث افزایش کارایی الگوریتم می‌شود.به این روش شبه تصویر(pseudo projction) می‌گویند.

جستارهای وابسته
---------------

* ‌دنباله‌کاوی
* الگوریتم آپریوری

منابع
-----

1. ↑  Pei, Jian (2000-10-04). "Mining sequential patterns by pattern-growth: the PrefixSpan approach". *IEEE* (به انگلیسی). **16** (11): 1424–24. doi:10.1109/TKDE.2004.77. ISSN 1558-2191.
2. ↑  Mabroukeh, N. R.; Ezeife, C. I. (2010). "A taxonomy of sequential pattern mining algorithms". *ACM Computing Surveys*. **43**: 1–41. CiteSeerX 10.1.1.332.4745. doi:10.1145/1824795.1824798.
3. ↑  Han, Jiawei (2001-02-01). "PrefixSpan,: mining sequential patterns efficiently by prefix-projected pattern growth". *IEEE* (به انگلیسی). doi:10.1109/ICDE.2001.914830. ISSN 1063-6382.
4. ↑  Pei, Jian (2000-10-04). "Mining sequential patterns by pattern-growth: the PrefixSpan approach". *IEEE* (به انگلیسی). **16** (11): 1430–32. doi:10.1109/TKDE.2004.77. ISSN 1558-2191.
5. ↑  Han, Jiawei (2001-02-01). "PrefixSpan,: mining sequential patterns efficiently by prefix-projected pattern growth". *IEEE* (به انگلیسی). doi:10.1109/ICDE.2001.914830. ISSN 1063-6382.