الگوریتم جریان داده‌ها - ویکی‌پدیا، دانشنامهٔ آزاد

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

تاریخچه[ویرایش]

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

مدل‌ها[ویرایش]

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

تحلیل و ارزیابی[ویرایش]

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

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


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

کاربردها[ویرایش]

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

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

ممان فرکانسی[ویرایش]

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

محاسبه ممان فرکانسی[ویرایش]

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

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

فلاجولت (به انگلیسی: Flajolet) وهمکاران در روش احتمالاتی از شمارش که از یک مقاله نوشتهٔ رابرت موریس الهام گرفته شده بود، شمارش تعداد زیادی از حوادث در ثبات‌های کوچک را معرفی کرد. موریس در مقاله خود می‌گوید که اگر نیاز به دقت، کاهش یافته‌است، یک شمارنده می‌تواند با یک شمارنده جایگزین شود که در بیت ذخیره می‌شود.[۷] فلاجولت (به انگلیسی: Flajolet) وهمکاران این روش را با استفاده از تابع هش که عناصر را به صورت یکنواخت در فضای هش توزیع می‌کند (یک رشته عدد باینری به طول )، بهبود بخشیدند.
فرض کنید bit(y,k) نشان‌دهنده بیت k ام در عدد باینری y است :

فرض کنید نشان‌دهنده کم ارزش‌ترین بیت ۱ در نمایش باینری عدد با یک قرارداد و تعریف مناسب از می‌باشد.
فرض کنید A یک دنباله‌ای از داده‌ها به طول M است که کاردینالیتی مورد نیاز را مشخص می‌کند. فرض کنید BITMAP[0..L-1] فضای هش می‌باشد که در آنجا ثبت می‌شود. الگوریتم زیر کاردینالیتی تقریبی 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 عنصر متمایز و جدا در جریان داده وجود داشته باشد:

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

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

الگوریتم قبلی اولین تلاش و مرحله برای تقریب در جریان داده‌ها توسط فلاجولت و مارتین توصیف می‌کند. الگوریتم یک تابع هش تصادفی را انتخاب می‌کند که به‌طور یکنواخت مقادیر را به فضای هش می‌برد.
باریوسف و همکاران الگوریتم مقدار k امین مینیمم برای تعیین تعداد عناصر متمایز در جریان داده‌ها را معرفی کردند. آن‌ها از یک تابع هش مشابه استفاده کردند که مقادیر رو بین ۰ و ۱ می‌برد (عملیات نرمال کردن) . اما آن‌ها یک مقدار محدود t را برای تعداد عناصر موجود در فضای هش یعنی بازه [۰٬۱] ثابت کردند. مقدار t از می‌باشد. الگوریتم KVM مقدار هش شدهٔ کوچک‌ترین t را نگه می‌دارد. پس ازاینکه همه m مقدار داده دریافت شد ، تا بتواند به وسیله آن را حساب کند. در بازه فضای یکنواخت هش، آن‌ها انتظار دارند که کمترین مقدار t از کمتر باشد.

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 امین مینیمم می‌تواند در از بیت‌های حافظه پیاده‌سازی شود. هش کردن هر مقدار از بیت‌های حافظه را نیاز دارد؛ و تعداد هش کردن مقادیر نیز از می‌باشد. اگر مقدار هش شده t در درخت باینری قرار داده شود، زمان دسترسی به آن به مقدار کاهش یافته و به‌طور کلی الگوریتم به کاهش می‌یابد.

محاسبه [ویرایش]

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

  • یک مقدار تصادفی از دنباله A با شماره p می‌باشد:
  • فرض کنید نشان‌دهنده تعداد رخداد l به عنوان عضوی از دنباله A با تعریف ap
  • متغیر تصادفی X با تعریف می‌باشد.

فرض کنید از باشد و از باشد، در این صورت الگوریتم را به عنوان یک متغیرتصادفی با مقادیر Y1,Y2,... ,YS2 و مقدار میانگین Y درنطر می‌گیرد. به‌طوری‌که Yi مقدار متوسط Xij برای همه ۱ ≤ jS1 می‌باشد.
اکنون مقدار را محاسبه می‌کنیم:

پیچیدگی[ویرایش]

باتوجه به الگوریتم بالا برای محاسبه که در آن متغیر تصادفی X دو مقدار و را ذخیره می‌کند پس متوجه می‌شویم برای محاسبه X به log(n) بیت برای ذخیره کردن و log(n) بیت برای ذخیره کردن نیازمندیم. تعداد کل متغیرتصادفی X از محاسبه می‌شود؛ بنابراین کل الگوریتم از می‌باشد.

روش مشابه برای محاسبه [ویرایش]

الگوریتم قبلی را در از حافظه محاسبه می‌کرد. آلون و همکاران ساده شده این الگوریتم را با استفاده از چهار متغیر تصادفی مستقل که مقادیر رو در بازه هش می‌کند. این کار پیچیدگی الگوریتم را به کاهش می‌دهد.

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

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

تشخیص رویداد[ویرایش]

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

شمارش عناصر متمایز[ویرایش]

شمارش تعداد عناصر متمایز در یک جریان (گاهی اوقات ممان خوانده می‌شود) مشکل دیگری است که به خوبی مورد مطالعه قرار گرفته‌است. اولین الگوریتم برای آن توسط فلاجولت و مارتین ارائه شده‌است. در سال ۲۰۱۰ کین، نلسون و ودراف یک الگوریتم مجانبی بهینه برای این مشکل پیدا کرده‌اند.[۹] این الگوریتم از O(ε2 + log d) برای حافظه و فضا، بدترین حالت به روزرسانی و زمانش از O(1)، هم‌چنین توابع هش جهانی و یک مجموعه از r هش مستقل به‌طوری کهr = Ω(log(1/ε) / log log(1/ε))استفاده می‌کند.

آنتروپی[ویرایش]

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

آنتروپی یک مجموعه از فرکانس‌های به صورت تعریف می‌شود که در آن . برآورد این مقدار در یک جریان توسط این افراد انجام شده‌است:

  • 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 978-3-540-44147-2.
  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)

منابع[ویرایش]

پیوند به بیرون[ویرایش]

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

وبگاه دروس