الگوریتم جریان داده‌ها
در علم رایانه الگوریتم جریان داده‌ها الگوریتمی ست برای پردازش جریان داده‌ها که به صورت توالی از آیتم‌ها به عنوان ورودی هستند و از یک یا تعداد محدودی گذرگاه می‌توانند مورد بررسی قرار بگیرند. در واقع این الگوریتم دنباله‌ای از داده را به عنوان ورودی دریافت کرده و یک سری تابع روی آن‌ها اعمال می‌کند. این الگوریتم حافظه مورد نیاز (کمتر از اندازه واقعی خود ورودی) و زمان پردازش هر آیتم را هم محدود می‌کند. این محدودیت‌ها به این معناست که این الگوریتم جواب تقریبی بر اساس یک خلاصه یا «طرحی» از جریان داده‌ها در حافظه تولید می‌کند.
اگرچه مطالعه الگوریتم جریان توسط مونرو و پاترسون دراوایل ۱۹۸۰ آغاز شد اما توسط و نایجل مارتین در ۱۹۸۲–۱۹۸۳ باعث شد موضوعات مرتبط به الگوریتم‌های جریان برای اولین بار به رسمیت شناخته شود و در یک مقاله در سال ۱۹۹۶ توسط نوگا آلون، یوسی ماتیاس، و ماریو محبوب شد. نویسندگان این مقاله بعداً جایزه گودل در سال ۲۰۰۵ را «برای سهم بنیادی شان نسبت به الگوریتم‌های جریانی» کسب کردند. از آن زمان کار زیادی حول الگوریتم‌های جریان داده انجام شد که طیف متنوعی از زمینه‌های علوم کامپیوتر از قبیل تئوری، پایگاه داده، شبکه و پردازش زبان طبیعی را گسترش داد. الگوریتم‌های نیمه جریانی در سال ۲۰۰۵ به عنوان یک فرمت از الگوریتم‌های جریانی ارائه شد که برای تعداد ثابت یا لگاریتمی از گذرگاه‌ها روی مجموعهٔ داده‌ها امکان‌پذیر است.
در مدل جریان داده‌ها، برخی یا همه داده‌های ورودی که قابل عملیات هستند، برای دسترسی تصادفی از روی دیسک یا حافظه در دسترس نیستند، اما به عنوان یک جریان داده پیوسته سریع تر می‌رسند. جریان را می‌توان به صورت دنباله‌ای از نقاط تعریف کرد که می‌تواند تنها یک بار یا تعداد کمی در دسترس قرار بگیرد. بسیاری از ادبیات جریانی با آمار کامپیوتری روی داده‌های توزیعی که برای ذخیره کردن بسیار بزرگ هستند، مرتبط است. برای این دسته از مشکلات یک بردار a = (formula_1 , … , formula_2) تعریف می‌کنیم که به صفر مقداردهی اولیه می‌کنیم که در یک جریان داده آمادهٔ به روزرسانی می‌باشد. هدف از این الگوریتم محاسبه توابعی از a با استفاده از فضای بسیار کمتری نسبت به فضایی که دقیقاً اشغال می‌کند، است. دو مدل رایج برای به روزرسانی هر جریان وجود دارد، به نام "مدل درخواست نقدی" (به انگلیسی:cash register) و "مدل گردان (به انگلیسی turnstile). در مدل درخواست نقدی، هر به روزرسانی به فرم (i,c) می‌باشد به‌طوری‌که formula_1 توسط c عدد صحیح مثبت افزایش می‌یابد. در مدل گردان هیچ‌کدام ازformula_4ها منفی نیستند. چندین مقاله نیز مدل «پنجره کشویی» را مطرح گرده‌اند. در این مدل، تابع مورد نظربرای محاسبه بیش از یک پنجره با اندازه ثابت در جریان داده دارد. هنگامی که جریان داده پیشرفت کند، یک آیتم از انتهای این جریان حذف شده و یک آیتم جدید جای آن را می‌گیرد.
علاوه بر مشکلاتی که در فرکانس بالا ایجادمیشود، مشکلات دیگر نیز بررسی شده‌است. تعدادی از مسائل گراف، با ماتریس همسایگی یا فهرست همسایگی که به صورت جریانی تعریف شده باشند، حل شده‌است. تعدادی از مشکلات این حوزه نیز به order(حجم و ترتیب و تعداد آیتم‌ها) یک جریان بستگی دارد. (مثلاً توابع نامتقارن) به‌طور مثال شمارش تعداد در یک توالی داده مثلاً یک آرایه و یافتن طولانی‌ترین زیررشته صعودی . در واقع الگوریتم‌های مطرح برای رسیدن به این خواسته‌ها به طول رشته داده بستگی دارد و هرچه تعداد آیتم‌های این توالی داده‌ها بیشتر باشد، زمان اجرای الگوریتم و رسیدن به مطلوب سؤال یشتر می‌شود، در واقع مفهوم order به معنی میزان زمان اجرای الگوریتم و تعداد عملیات‌های انجام شده در یک الگوریتم و پیچیدگی الگوریتم می‌باشد. با توجه به حجم داده‌ها، مدل جریان داده‌ها در پیدا کردن نابه جایی‌ها یک محیط طبیعی برای طراحی کارآمد است. ما مجموعه‌ای از الگوریتم‌های جریانی کارآمد، برای تخمین تعداد نابه جایی‌ها در یک جایگشت به دست می‌آوریم. بهترین order برای این الگوریتم‌ها الگوریتم قطعی (deterministic) است که درformula_5 انجام می‌شود (عبارت formula_5 به این مفهوم است که وقتی طول رشته داده ما n باشد زمان اجرای الگوریتم و همان order الگوریتم یک ضریبی از formula_7 می‌باشد).
عملکرد یک الگوریتم در جریانی از داده‌ها توسط سه عامل اساسی اندازه‌گیری می‌شود:
این الگوریتم‌ها شباهت‌های بسیاری با الگوریتم برخط دارند، زیرا هر دو نیاز به تصمیم‌گیری و پردازش و اجرای عملیات دارند قبل از اینکه تمام داده‌ها در دسترس باشند، یعنی در ابتدای شروع کار الگوریتم، ورودی این الگوریتم‌ها به‌طور کامل در اختیار الگوریتم نیست و به صورت ترتیبی و مرحله مرحله انجام می‌شود اما این شباهت به معنی یکسانی نیست. الگوریتم‌های جریان داده‌ها تنها حافظهٔ در دسترس را محدود کرده‌اند اما آن‌ها ممکن است انجام یک عمل را به تأخیر بیندازند تا یک گروه از نقاط برسند، در حالی که الگوریتم‌های برخط به محض اینکه نقطه‌ای برسد، عملیات را انجام می‌دهند. در واقع الگوریتم‌های جریانی حافظهٔ در دسترس شان را می‌توانند تغییر دهند و حافظه‌شان از formula_8 است اما حافظهٔ در دسترس الگوریتم‌های برخط ثابت و از formula_9 می‌باشد. در نتیجه این تفاوت‌ها داریم که الگوریتم‌های جریانی به‌طور نهایی می‌توانند اجرای درست عملیات خود را آزمایش کنند اما آزمایش کردن برای الگوریتم برخط هرمرحله انجام می‌شود اگر الگوریتمی تقریبی باشد، دقت جواب فاکتور کلیدی می‌شود. دقت پاسخ اغلب به صورت (formula_10 , formula_11) بیان می‌شود که در آن اشتباه و خطای پاسخ از formula_11 با احتمال کمتر است.
الگوریتم جریان داده‌ها چندین کابرد در حوزه شبکه رایانه‌ای از قبیل کنترل پیوندهای شبکه برای ، شمارش تعداد جریان‌های متمایز، برآورد توزیع اندازه جریان و غیره دارد. هم‌چنین تعدادی کابرد در زمینهٔ پایگاه داده دارد مانند تخمین اندازه . به عنوان مثال در زمینه ارتباطات :۳ میلیارد تماس‌های تلفنی در آمریکا هر روز ۳۰ میلیارد ایمیل‌های روزانه، ۱ میلیارد اس‌ام‌اس وجود دارد که ذخیره تمام این داده‌ها در حافظه با دسترسی تصادفی برای پردازش غیرممکن است؛ که راه حل این مسئله پردازش داده‌ها به عنوان یک جریان و بردازش روی این داده‌ها می‌باشد.
k مین ممان فرکانسی از مجموعه فرکانس‌ها به اسم a ایگونه تعریف می‌شود: formula_13 اولین ممان formula_14 به سادگی مجموع فرکانس‌هاست (به عنوان مثال، تعداد کل). رخدادformula_15 برای محاسبه خواص آماری از داده‌ها، مانند شاخص جینی مورد استفاده است. formula_16 به عنوان فرکانس عضو پرفرکانس‌ترین تعریف می‌شود. مقاله بدوی از آلون، ماتیاس و Szegedy به مشکل برآورد لحظات فرکانس پرداخته است.
یک روش مستقیم برای پیدا کردن ممان‌های فرکانس نیاز به حفظ یک ثبات formula_17 برای همه عناصر متمایزformula_18 که عضو (۱٬۲٬۳٬۴، …، N) می‌باشد که به حداقل حافظه با حدودformula_19 نیاز دارند. اما ما باید محدودیت فضا مواجه هستیم و نیاز به یک الگوریتم است که در حافظه بسیار پایین‌تر محاسبه کند. به این می‌توان با استفاده از تقریب به جای ارزش‌های دقیق دست یافت. یک الگوریتمی که محاسبه می‌کند یک تقریب (formula_10 , formula_11) از formula_22 که formula_11 به عنوان پارامتر تقریب و formula_10 به عنوان پارامتر اطمینان است. .
فلاجولت وهمکاران در روش احتمالاتی از شمارش که از یک مقاله نوشتهٔ رابرت موریس الهام گرفته شده بود، شمارش تعداد زیادی از حوادث در ثبات‌های کوچک را معرفی کرد. موریس در مقاله خود می‌گوید که اگر نیاز به دقت، کاهش یافته‌است، یک شمارنده formula_26 می‌تواند با یک شمارنده formula_7 جایگزین شود که در formula_28 بیت ذخیره می‌شود. فلاجولت وهمکاران این روش را با استفاده از تابع هش formula_29 که عناصر را به صورت یکنواخت در فضای هش توزیع می‌کند (یک رشته عدد باینری به طول formula_30)، بهبود بخشیدند. formula_31 فرض کنید bit(y,k) نشان‌دهنده بیت k ام در عدد باینری y است : formula_32
فرض کنید formula_33 نشان‌دهنده کم ارزش‌ترین بیت ۱ در نمایش باینری عدد formula_34 با یک قرارداد و تعریف مناسب از formula_35 می‌باشد. formula_36 فرض کنید A یک دنباله‌ای از داده‌ها به طول M است که کاردینالیتی مورد نیاز را مشخص می‌کند. فرض کنید BITMAP[0..L-1] فضای هش می‌باشد که formula_37 در آنجا ثبت می‌شود. الگوریتم زیر کاردینالیتی تقریبی A را مشخص می‌کند.
Procedure FM-Sketch:
اگر n عنصر متمایز و جدا در جریان داده وجود داشته باشد:
برای همه formula_38 ، در این صورت: BITMAP[i]=0 برای همه formula_39 ، در این صورت: BITMAP[i] = 1 برای همه formula_40 ، در این صورت BITMAP[i] عددی اطراف ۰ و ۱ می‌شود.
الگوریتم قبلی اولین تلاش و مرحله برای تقریب formula_41 در جریان داده‌ها توسط فلاجولت و مارتین توصیف می‌کند. الگوریتم یک تابع هش تصادفی را انتخاب می‌کند که به‌طور یکنواخت مقادیر را به فضای هش می‌برد. باریوسف و همکاران الگوریتم مقدار k امین مینیمم برای تعیین تعداد عناصر متمایز در جریان داده‌ها را معرفی کردند. آن‌ها از یک تابع هش مشابه استفاده کردند که مقادیر رو بین ۰ و ۱ می‌برد (عملیات نرمال کردن)formula_42 . اما آن‌ها یک مقدار محدود t را برای تعداد عناصر موجود در فضای هش یعنی بازه [۰٬۱] ثابت کردند. مقدار t از formula_43 می‌باشد. الگوریتم KVM مقدار هش شدهٔ کوچک‌ترین t را نگه می‌دارد. پس ازاینکه همه m مقدار داده دریافت شد ، formula_44 تا بتواند به وسیله آن formula_45را حساب کند. در بازه فضای یکنواخت هش، آن‌ها انتظار دارند که کمترین مقدار t از formula_46 کمتر باشد.
الگوریتم یافتن مقدار k امین مینیمم می‌تواند در formula_47 از بیت‌های حافظه پیاده‌سازی شود. هش کردن هر مقدار formula_48 از بیت‌های حافظه را نیاز دارد؛ و تعداد هش کردن مقادیر نیز از formula_43 می‌باشد. اگر مقدار هش شده t در درخت باینری قرار داده شود، زمان دسترسی به آن به مقدار formula_50 کاهش یافته و به‌طور کلی الگوریتم به formula_51 کاهش می‌یابد.
آلون و همکاران formula_53 را با تعریف متغیری تصادفی که به وسیله فضا و زمان داده شده قابل محساسبه است، تخمین زدند. مقدار formula_54 یعنی مقدار میانگین وزن‌دار این متغیر تصادفی بیانگر مقدار تقریبی formula_52 می‌باشد. طول داده m از قبل محاسبه شده‌است. متغیر تصادفی X این‌گونه تعریف می‌شود: فرض کنید formula_60 از formula_61 باشد و formula_62 ازformula_63 باشد، در این صورت الگوریتم formula_62 را به عنوان یک متغیرتصادفی با مقادیر "Y"",Y""... ,Y" و مقدار میانگین "Y" درنطر می‌گیرد. به‌طوری‌که مقدار متوسط برای همه ۱ ≤ "j" ≤ "S" می‌باشد. اکنون مقدارformula_65 را محاسبه می‌کنیم:
formula_66 باتوجه به الگوریتم بالا برای محاسبه formula_52 که در آن متغیر تصادفی "X" دو مقدار formula_56 و formula_70 را ذخیره می‌کند پس متوجه می‌شویم برای محاسبه "X" به log(n) بیت برای ذخیره کردن formula_56 و log(n) بیت برای ذخیره کردن formula_70 نیازمندیم. تعداد کل متغیرتصادفی "X" از formula_73 محاسبه می‌شود؛ بنابراین کل الگوریتم از formula_74 می‌باشد.
الگوریتم قبلی formula_76 را در formula_77 از حافظه محاسبه می‌کرد. آلون و همکاران ساده شده این الگوریتم را با استفاده از چهار متغیر تصادفی مستقل که مقادیر رو در بازه formula_78 هش می‌کند. این کار پیچیدگی الگوریتم را به formula_79 کاهش می‌دهد.
برخی از الگوریتم‌های قابل توجه به جهت یافتن شایع‌ترین و محبوب‌ترین عناصر در یک جریان داده‌ها:
تشخیص رویدادها در جریان داده اغلب با استفاده از یک الگوریتم بزرگان که در بالا ذکر شده‌است، انجام می‌شود. شایع‌ترین عناصر و میزان فرکانس و تکرار با استفاده یکی از این الگوریتمها تعیین می‌شود، سپس بیشترین افزایشی که در طول زمان گذشته رخ داده گزارش شود. این رویکرد می‌تواند با استفاده از میانگین متحرک نمایی و واریانس عادی و نرمال شده تصفیه شود.
شمارش تعداد عناصر متمایز در یک جریان (گاهی اوقات ممانformula_41 خوانده می‌شود) مشکل دیگری است که به خوبی مورد مطالعه قرار گرفته‌است. اولین الگوریتم برای آن توسط فلاجولت و مارتین ارائه شده‌است. در سال ۲۰۱۰ کین، نلسون و ودراف یک الگوریتم مجانبی بهینه برای این مشکل پیدا کرده‌اند. این الگوریتم از برای حافظه و فضا، بدترین حالت به روزرسانی و زمانش از ، هم‌چنین توابع هش جهانی و یک مجموعه از "r" هش مستقل به‌طوری کهاستفاده می‌کند.
با استفاده از آنتروپی توزیع ترافیک می‌توان نشان داد در طیف گسترده‌ای از برنامه‌های کاربردی نظارت بر شبکه مانند تشخیص ناهنجاری، خوشه بندی برای آشکار ساختن الگوهای جالب، و طبقه‌بندی ترافیک ازآن استفاده می‌شود. با این حال، تحقق این سود بالقوه در عمل نیاز به الگوریتم‌های دقیق است که بتوانند بر روی لینک‌های با سرعت بالا با پردازنده و حافظه مورد نیاز پایین عمل کنند. در این راستا دو الگوریتم وجود دارد که اولین الگوریتم برای برآورد آنتروپی توسط شباهت ساختاری با کار منی آلون و همکاران الهام گرفته‌است که برای برآورد ممان‌های فرکانس از آن استفاده می‌شود و الگوریتم دوم که در آن با مشاهدات عملکرد الگوریتم جریان به جدا کردن آیتم‌های فرکانس بالا (یا فیل‌ها) از موارد با فرکانس پایین می‌رسیم.
آنتروپی یک مجموعه از فرکانس‌های formula_81 به صورت formula_82 تعریف می‌شود که در آن formula_83. برآورد این مقدار در یک جریان توسط این افراد انجام شده‌است:
مقاله اصلی:  یادگیری یک مدل (به عنوان مثال یک طبقه‌بندی آماری) از طریق گذراندن یک مجموعه آموزش:
کران پایین برای بسیاری از مشکلات جریان داده که مطالعه شده‌اند محاسبه شده‌است. تا کنون، متداول‌ترین روش برای محاسبه این کران استفاده از پیچیدگی‌های ارتباطی است.
آموزش و نظرسنجی
وبگاه دروس