الگوریتم جریان داده‌ها

از testwiki
نسخهٔ تاریخ ۲۲ سپتامبر ۲۰۲۳، ساعت ۰۸:۲۲ توسط imported>Behrooz080 (growthexperiments-addlink-summary-summary:3|0|0)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

در علم رایانه الگوریتم جریان داده‌ها الگو:به انگلیسی الگوریتمی ست برای پردازش جریان داده‌ها که به صورت توالی از آیتم‌ها به عنوان ورودی هستند و از یک یا تعداد محدودی گذرگاه می‌توانند مورد بررسی قرار بگیرند. در واقع این الگوریتم دنباله‌ای از داده را به عنوان ورودی دریافت کرده و یک سری تابع روی آن‌ها اعمال می‌کند. این الگوریتم حافظه مورد نیاز (کمتر از اندازه واقعی خود ورودی) و زمان پردازش هر آیتم را هم محدود می‌کند. این محدودیت‌ها به این معناست که این الگوریتم جواب تقریبی بر اساس یک خلاصه یا «طرحی» از جریان داده‌ها در حافظه تولید می‌کند.

تاریخچه

اگرچه مطالعه الگوریتم جریان توسط مونرو و پاترسون[۱] دراوایل ۱۹۸۰ آغاز شد اما توسط Philippe Flajolet و نایجل مارتین در ۱۹۸۲–۱۹۸۳ باعث شد[۲] موضوعات مرتبط به الگوریتم‌های جریان برای اولین بار به رسمیت شناخته شود و در یک مقاله در سال ۱۹۹۶ توسط نوگا آلون، یوسی ماتیاس، و ماریو[۳] محبوب شد. نویسندگان این مقاله بعداً جایزه گودل در سال ۲۰۰۵ را «برای سهم بنیادی شان نسبت به الگوریتم‌های جریانی» کسب کردند. از آن زمان کار زیادی حول الگوریتم‌های جریان داده انجام شد که طیف متنوعی از زمینه‌های علوم کامپیوتر از قبیل تئوری، پایگاه داده، شبکه و پردازش زبان طبیعی را گسترش داد. الگوریتم‌های نیمه جریانی در سال ۲۰۰۵ به عنوان یک فرمت از الگوریتم‌های جریانی ارائه شد که برای تعداد ثابت یا لگاریتمی از گذرگاه‌ها روی مجموعهٔ داده‌ها امکان‌پذیر است.

مدل‌ها

در مدل جریان داده‌ها، برخی یا همه داده‌های ورودی که قابل عملیات هستند، برای دسترسی تصادفی از روی دیسک یا حافظه در دسترس نیستند، اما به عنوان یک جریان داده پیوسته سریع تر می‌رسند. جریان را می‌توان به صورت دنباله‌ای از نقاط تعریف کرد که می‌تواند تنها یک بار یا تعداد کمی در دسترس قرار بگیرد. بسیاری از ادبیات جریانی با آمار کامپیوتری روی داده‌های توزیعی که برای ذخیره کردن بسیار بزرگ هستند، مرتبط است. برای این دسته از مشکلات یک بردار a = (a1 , … , an) تعریف می‌کنیم که به صفر مقداردهی اولیه می‌کنیم که در یک جریان داده آمادهٔ به روزرسانی می‌باشد. هدف از این الگوریتم محاسبه توابعی از a با استفاده از فضای بسیار کمتری نسبت به فضایی که دقیقاً اشغال می‌کند، است. دو مدل رایج برای به روزرسانی هر جریان وجود دارد، به نام "مدل درخواست نقدی" (به انگلیسی:cash register) و "مدل گردان (به انگلیسی turnstile).[۴] در مدل درخواست نقدی، هر به روزرسانی به فرم (i,c) می‌باشد به‌طوری‌که a1 توسط c عدد صحیح مثبت افزایش می‌یابد. در مدل گردان هیچ‌کدام ازaiها منفی نیستند. چندین مقاله نیز مدل «پنجره کشویی» را مطرح گرده‌اند. در این مدل، تابع مورد نظربرای محاسبه بیش از یک پنجره با اندازه ثابت در جریان داده دارد. هنگامی که جریان داده پیشرفت کند، یک آیتم از انتهای این جریان حذف شده و یک آیتم جدید جای آن را می‌گیرد. الگو:سخ علاوه بر مشکلاتی که در فرکانس بالا ایجادمیشود، مشکلات دیگر نیز بررسی شده‌است. تعدادی از مسائل گراف، با ماتریس همسایگی یا فهرست همسایگی که به صورت جریانی تعریف شده باشند، حل شده‌است. تعدادی از مشکلات این حوزه نیز به order(حجم و ترتیب و تعداد آیتم‌ها) یک جریان بستگی دارد. (مثلاً توابع نامتقارن) به‌طور مثال شمارش تعداد نابه جایی‌ها در یک توالی داده مثلاً یک آرایه و یافتن طولانی‌ترین زیررشته صعودی . در واقع الگوریتم‌های مطرح برای رسیدن به این خواسته‌ها به طول رشته داده بستگی دارد و هرچه تعداد آیتم‌های این توالی داده‌ها بیشتر باشد، زمان اجرای الگوریتم و رسیدن به مطلوب سؤال یشتر می‌شود، در واقع مفهوم order به معنی میزان زمان اجرای الگوریتم و تعداد عملیات‌های انجام شده در یک الگوریتم و پیچیدگی الگوریتم می‌باشد. با توجه به حجم داده‌ها، مدل جریان داده‌ها در پیدا کردن نابه جایی‌ها یک محیط طبیعی برای طراحی کارآمد است. ما مجموعه‌ای از الگوریتم‌های جریانی کارآمد، برای تخمین تعداد نابه جایی‌ها در یک جایگشت به دست می‌آوریم. بهترین order برای این الگوریتم‌ها الگوریتم قطعی (deterministic) است که درO(logn) انجام می‌شود (عبارت O(logn) به این مفهوم است که وقتی طول رشته داده ما n باشد زمان اجرای الگوریتم و همان order الگوریتم یک ضریبی از logn می‌باشد).

تحلیل و ارزیابی

عملکرد یک الگوریتم در جریانی از داده‌ها توسط سه عامل اساسی اندازه‌گیری می‌شود:

  • تعداد عملیات‌ها و گذرهایی که روی اعضای آن توالی داده انجام می‌شود.
  • حافظه موجود.
  • زمان اجرای الگوریتم

الگو:سخ این الگوریتم‌ها شباهت‌های بسیاری با الگوریتم برخط دارند، زیرا هر دو نیاز به تصمیم‌گیری و پردازش و اجرای عملیات دارند قبل از اینکه تمام داده‌ها در دسترس باشند، یعنی در ابتدای شروع کار الگوریتم، ورودی این الگوریتم‌ها به‌طور کامل در اختیار الگوریتم نیست و به صورت ترتیبی و مرحله مرحله انجام می‌شود اما این شباهت به معنی یکسانی نیست. الگوریتم‌های جریان داده‌ها تنها حافظهٔ در دسترس را محدود کرده‌اند اما آن‌ها ممکن است انجام یک عمل را به تأخیر بیندازند تا یک گروه از نقاط برسند، در حالی که الگوریتم‌های برخط به محض اینکه نقطه‌ای برسد، عملیات را انجام می‌دهند. در واقع الگوریتم‌های جریانی حافظهٔ در دسترس شان را می‌توانند تغییر دهند و حافظه‌شان از O(n) است اما حافظهٔ در دسترس الگوریتم‌های برخط ثابت و از O(1) می‌باشد. در نتیجه این تفاوت‌ها داریم که الگوریتم‌های جریانی به‌طور نهایی می‌توانند اجرای درست عملیات خود را آزمایش کنند اما آزمایش کردن برای الگوریتم برخط هرمرحله انجام می‌شودالگو:سخ اگر الگوریتمی تقریبی باشد، دقت جواب فاکتور کلیدی می‌شود. دقت پاسخ اغلب به صورت (δ , ϵ) بیان می‌شود که در آن اشتباه و خطای پاسخ از ϵ با احتمال کمتر است.

کاربردها

الگوریتم جریان داده‌ها چندین کابرد در حوزه شبکه رایانه‌ای از قبیل کنترل پیوندهای شبکه برای جریان‌های بزرگ داده، شمارش تعداد جریان‌های متمایز، برآورد توزیع اندازه جریان و غیره دارد.[۵] هم‌چنین تعدادی کابرد در زمینهٔ پایگاه داده دارد مانند تخمین اندازه پیوندها.الگو:سخ به عنوان مثال در زمینه ارتباطات :۳ میلیارد تماس‌های تلفنی در آمریکا هر روز ۳۰ میلیارد ایمیل‌های روزانه، ۱ میلیارد اس‌ام‌اس وجود دارد که ذخیره تمام این داده‌ها در حافظه با دسترسی تصادفی برای پردازش غیرممکن است؛ که راه حل این مسئله پردازش داده‌ها به عنوان یک جریان و بردازش روی این داده‌ها می‌باشد.

چندمسئله حل شده با الگوریتم جریان داده‌ها

ممان فرکانسی

k مین ممان فرکانسی از مجموعه فرکانس‌ها به اسم a ایگونه تعریف می‌شود: Fk(a)=i=1naikالگو:سخ اولین ممان F1 به سادگی مجموع فرکانس‌هاست (به عنوان مثال، تعداد کل). رخدادF2 برای محاسبه خواص آماری از داده‌ها، مانند شاخص جینی مورد استفاده است. F به عنوان فرکانس عضو پرفرکانس‌ترین تعریف می‌شود.الگو:سخ مقاله بدوی از آلون، ماتیاس و Szegedy به مشکل برآورد لحظات فرکانس پرداخته است.

محاسبه ممان فرکانسی

یک روش مستقیم برای پیدا کردن ممان‌های فرکانس نیاز به حفظ یک ثبات mi برای همه عناصر متمایزai که عضو (۱٬۲٬۳٬۴، …، N) می‌باشد که به حداقل حافظه با حدودΩ(n) نیاز دارند.[۳] اما ما باید محدودیت فضا مواجه هستیم و نیاز به یک الگوریتم است که در حافظه بسیار پایین‌تر محاسبه کند. به این می‌توان با استفاده از تقریب به جای ارزش‌های دقیق دست یافت. یک الگوریتمی که محاسبه می‌کند یک تقریب (δ , ϵ) از Fk که ϵ به عنوان پارامتر تقریب و δ به عنوان پارامتر اطمینان است. .[۶]

محاسبه F0 عناصر متمایز در جریان داده
الگوریتم FM-Sketch

فلاجولت الگو:به انگلیسی وهمکاران در روش احتمالاتی از شمارش که از یک مقاله نوشتهٔ رابرت موریس الهام گرفته شده بود، شمارش تعداد زیادی از حوادث در ثبات‌های کوچک را معرفی کرد. موریس در مقاله خود می‌گوید که اگر نیاز به دقت، کاهش یافته‌است، یک شمارنده n می‌تواند با یک شمارنده logn جایگزین شود که در loglogn بیت ذخیره می‌شود.[۷] فلاجولت الگو:به انگلیسی وهمکاران این روش را با استفاده از تابع هش h که عناصر را به صورت یکنواخت در فضای هش توزیع می‌کند (یک رشته عدد باینری به طول L)، بهبود بخشیدند. h:[m]>[0,2L1]الگو:سخ فرض کنید bit(y,k) نشان‌دهنده بیت k ام در عدد باینری y است : k>=0bit(y,k)*2kالگو:سخ الگو:سخ فرض کنید ρ(y) نشان‌دهنده کم ارزش‌ترین بیت ۱ در نمایش باینری عدد yi با یک قرارداد و تعریف مناسب از ρ(0) می‌باشد. {Min(bit(y,k))ify>0Lify=0الگو:سخ فرض کنید A یک دنباله‌ای از داده‌ها به طول M است که کاردینالیتی مورد نیاز را مشخص می‌کند. فرض کنید BITMAP[0..L-1] فضای هش می‌باشد که ρ(hashedvalues) در آنجا ثبت می‌شود. الگوریتم زیر کاردینالیتی تقریبی A را مشخص می‌کند.الگو:سخ الگو:چپ‌چین Procedure FM-Sketch:

 for i in 0 to L − 1 do
 BITMAP[i]:=0
 end for
 for x in A: do
 Index:=ρ(hash(x))
 i
 end if
 end for
 B:= Position of left most 0 bit of BITMAP[]
 return 2^B

الگو:پایان چپ‌چین الگو:سخ اگر n عنصر متمایز و جدا در جریان داده وجود داشته باشد:

برای همه ilogn ، در این صورت: BITMAP[i]=0الگو:سخ برای همه ilogn ، در این صورت: BITMAP[i] = 1الگو:سخ برای همه ilogn ، در این صورت BITMAP[i] عددی اطراف ۰ و ۱ می‌شود.

الگوریتم ارزش k امین مینیمم

الگوریتم قبلی اولین تلاش و مرحله برای تقریب F0 در جریان داده‌ها توسط فلاجولت و مارتین توصیف می‌کند. الگوریتم یک تابع هش تصادفی را انتخاب می‌کند که به‌طور یکنواخت مقادیر را به فضای هش می‌برد.الگو:سخ باریوسف و همکاران الگوریتم مقدار k امین مینیمم برای تعیین تعداد عناصر متمایز در جریان داده‌ها را معرفی کردند. آن‌ها از یک تابع هش مشابه استفاده کردند که مقادیر رو بین ۰ و ۱ می‌برد (عملیات نرمال کردن)h:[m]>[0,1] . اما آن‌ها یک مقدار محدود t را برای تعداد عناصر موجود در فضای هش یعنی بازه [۰٬۱] ثابت کردند. مقدار t از O(1ϵ2) می‌باشد. الگوریتم KVM مقدار هش شدهٔ کوچک‌ترین t را نگه می‌دارد. پس ازاینکه همه m مقدار داده دریافت شد ، v=Max(h(ai)) تا بتواند به وسیله آن F0=tvرا حساب کند. در بازه فضای یکنواخت هش، آن‌ها انتظار دارند که کمترین مقدار t از O(tF0) کمتر باشد.الگو:سخ الگو:چپ‌چین

Procedure 2 K-Minimum Value

Initialize first t values of KMV
for a in a1 to an do
if h(a) <Max(KMV) then
Remove Max(KMV) from KMV set
Insert h(a) to KMV
end if
end for
return t/Max(KMV)

الگو:پایان چپ‌چین

تحلیل پیچیدگی الگوریتم KMV

الگوریتم یافتن مقدار k امین مینیمم می‌تواند در O((1ϵ2).log(m))) از بیت‌های حافظه پیاده‌سازی شود. هش کردن هر مقدار O(log(m))) از بیت‌های حافظه را نیاز دارد؛ و تعداد هش کردن مقادیر نیز از O(1ϵ2) می‌باشد. اگر مقدار هش شده t در درخت باینری قرار داده شود، زمان دسترسی به آن به مقدار O(1ϵ) کاهش یافته و به‌طور کلی الگوریتم به O((1ϵ).log(m))) کاهش می‌یابد.

محاسبه Fk

آلون و همکاران Fx را با تعریف متغیری تصادفی که به وسیله فضا و زمان داده شده قابل محساسبه است، تخمین زدند. مقدار E[x] یعنی مقدار میانگین وزن‌دار این متغیر تصادفی بیانگر مقدار تقریبی Fk می‌باشد.الگو:سخ طول داده m از قبل محاسبه شده‌است.الگو:سخ متغیر تصادفی X این‌گونه تعریف می‌شود:

  • ap یک مقدار تصادفی از دنباله A با شماره p می‌باشد:ap=l(1,2,3,,n)
  • فرض کنید r=|{q:qp,aq=l}| نشان‌دهنده تعداد رخداد l به عنوان عضوی از دنباله A با تعریف الگو:Mvar
  • متغیر تصادفی X با تعریف X=m(rk(r1)k) می‌باشد.

فرض کنید S1 از O(n11kλ2) باشد و S2 ازO(log(1ϵ)) باشد، در این صورت الگوریتم S2 را به عنوان یک متغیرتصادفی با مقادیر Y1,Y2,... ,YS2 و مقدار میانگین Y درنطر می‌گیرد. به‌طوری‌که الگو:Mvar مقدار متوسط الگو:Mvar برای همه ۱ ≤ jS1 می‌باشد.الگو:سخ اکنون مقدارE[X] را محاسبه می‌کنیم:الگو:سخ الگو:چپ‌چین E(X)=i=1ni=1mi(jk(j1)k)=mm[(1k+(2k1k)++(m1k(m11)k))+(1k+(2k1k)++(m2k(m21)k))++(1k+(2k1k)++(mnk(mn1)k))]=i=1nmik=Fk الگو:پایان چپ‌چین

پیچیدگیFk

باتوجه به الگوریتم بالا برای محاسبه Fk که در آن متغیر تصادفی X دو مقدار ap و r را ذخیره می‌کند پس متوجه می‌شویم برای محاسبه X به log(n) بیت برای ذخیره کردن ap و log(n) بیت برای ذخیره کردن r نیازمندیم. تعداد کل متغیرتصادفی X از S1*S2 محاسبه می‌شود؛ بنابراین کل الگوریتم از O(klog1ελ2n11k(logn+logm)) می‌باشد.

روش مشابه برای محاسبه Fk

الگوریتم قبلی F2 را در O(n(logm+logn)) از حافظه محاسبه می‌کرد. آلون و همکاران ساده شده این الگوریتم را با استفاده از چهار متغیر تصادفی مستقل که مقادیر رو در بازه [1,1] هش می‌کند. این کار پیچیدگی الگوریتم را به O(log1ελ2(logn+logm)) کاهش می‌دهد.

بزرگان الگوریتم‌های جریان داده‌ها

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

تشخیص رویداد

تشخیص رویدادها در جریان داده اغلب با استفاده از یک الگوریتم بزرگان که در بالا ذکر شده‌است، انجام می‌شود. شایع‌ترین عناصر و میزان فرکانس و تکرار با استفاده یکی از این الگوریتمها تعیین می‌شود، سپس بیشترین افزایشی که در طول زمان گذشته رخ داده گزارش شود. این رویکرد می‌تواند با استفاده از میانگین متحرک نمایی و واریانس عادی و نرمال شده تصفیه شود. .[۸]

شمارش عناصر متمایز

شمارش تعداد عناصر متمایز در یک جریان (گاهی اوقات ممانF0 خوانده می‌شود) مشکل دیگری است که به خوبی مورد مطالعه قرار گرفته‌است. اولین الگوریتم برای آن توسط فلاجولت و مارتین ارائه شده‌است. در سال ۲۰۱۰ کین، نلسون و ودراف یک الگوریتم مجانبی بهینه برای این مشکل پیدا کرده‌اند.[۹] این الگوریتم از الگو:Math برای حافظه و فضا، بدترین حالت به روزرسانی و زمانش از الگو:Math، هم‌چنین توابع هش جهانی و یک مجموعه از r هش مستقل به‌طوری کهالگو:Mathاستفاده می‌کند.

آنتروپی

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

آنتروپی یک مجموعه از فرکانس‌های 𝐚 به صورت Fk(𝐚)=i=1naimlogaim تعریف می‌شود که در آن m=i=1nai. برآورد این مقدار در یک جریان توسط این افراد انجام شده‌است:

  • McGregor و همکاران
  • Do Ba و همکاران
  • Lall و همکاران
  • Chakrabarti و همکاران

یادگیری آنلاین

مقاله اصلی: یادگیری آنلاین ماشین یادگیری یک مدل (به عنوان مثال یک طبقه‌بندی آماری) از طریق گذراندن یک مجموعه آموزش:

کران پایین

کران پایین برای بسیاری از مشکلات جریان داده که مطالعه شده‌اند محاسبه شده‌است. تا کنون، متداول‌ترین روش برای محاسبه این کران استفاده از پیچیدگی‌های ارتباطی است.

بیشتر مطالعه کنید

پانویس

الگو:پانویس

منابع

پیوند به بیرون

آموزش و نظرسنجی

وبگاه دروس

  1. Munro & Paterson (1980)
  2. Flajolet & Martin (1985)
  3. ۳٫۰ ۳٫۱ Alon, Matias & Szegedy (1996)
  4. Gilbert et al. (2001)
  5. Xu (2007)
  6. Bar-Yossef, Ziv; Jayram, T. S. ; Kumar, Ravi; Sivakumar, D. ; Trevisan, Luca (2002-09-13). Rolim, José D. P. ; Vadhan, Salil, eds. Counting Distinct Elements in a Data Stream. Lecture Notes in Computer Science. Springer Berlin Heidelberg. pp. 1–10. الگو:ISBN.
  7. Flajolet, Philippe (1985-03-01). "Approximate counting: A detailed analysis". BIT Numerical Mathematics. 25 (1): 113–134. doi:10.1007/BF01934993. ISSN 0006-3835
  8. Schubert, E. ; Weiler, M. ; Kriegel, H. P. (2014). SigniTrend: scalable detection of emerging topics in textual streams by hashed significance thresholds. Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining - KDD '14. pp. 871–880. doi:10.1145/2623330.2623740. الگو:شابک
  9. Kane, Nelson & Woodruff (2010)