تجزیه و تحلیل جریان داده: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Z Ehyaei (بحث | مشارکت‌ها)
برچسب‌ها: ویرایش همراه ویرایش از وبگاه همراه
Ntjavid (بحث | مشارکت‌ها)
ابرابزار
خط ۳۴:
 
== همگرایی ==
همان‌طور که پیش تر گفته شد،‌‌شد، در روش استفاده از الگوریتم‌های تکراری، تکرار الگوریتم تا زمانی ادامه پیدا می‌کند که به نقطه ثابتی برسد؛ پس برای اینکه در عمل بتوانیم از این روش استفاده کنیم، سیستم باید همگرا باشد. همگرایی سیستم با اعمال یک سری شرط روی [[دامنه (آمار)|دامنه]] مقادیر حالت‌ها، تابع انتقال و عملگر پیوند تضمین خواهد شد. این شروط عبارتند از:
* دامنه مقادیر باید [[مجموعه جزئاً مرتب]] و کراندار باشد.
* ترکیب تابع انتقال و پیوند باید یک [[تابع یکنوا]] نسبت به ترتیب مقادیر در دامنه باشد.
خط ۴۵:
ترتیب پیمایش بلوک‌ها در فرایند اجرای الگوریتم روی کارایی الگوریتم و زمان اجرای آن، تأثیر مستقیم دارد. عامل مهم دیگری که در این بحث اهمیت دارد، رو به جلو {{انگلیسی|forward}} یا رو به عقب {{انگلیسی|backward}} بودن تحلیل در گراف روند کنترل می‌باشد. اگر تحلیل ما رو به جلو باشد، بهتر است اجداد هر گره در گراف، قبل از آن شده باشند؛ چرا که حالت هر بلوک وابسته به حالات اجداد آن در گراف خواهد بود و اگر قبل از دیدن هر گره اجداد آن دیده شده باشند، سرعت همگرایی الگوریتم بیشتر خواهد بود. اگر در گراف حلقه نداشته باشیم، می‌توان ترتیبی از بلوک‌ها را پیدا کرد که تنها با یک بار اجرای الگوریتم روی هر بلوک، مقدار نهایی و صحیح هر بلوک به دست آید. برخی از ترتیب‌های ممکن برای پیمایش گراف در اجرای الگوریتم عبارتند از:
* پیمایش تصادفی: در این روش بلوک‌ها به ترتیب تصادفی پیمایش می‌شوند و به رو به جلو یا رو به عقب بودن تحلیل توجهی نمی‌شود به همین دلیل عملکرد این مدل ترتیب پیمایش به نسبت پیمایش‌های دیگر ضعیف است.
* پیمایش پس ترتیب {{انگلیسی| Postorder}}: این ترتیب پیمایش برای تحلیل رو به عقب مناسب است. در این روش هر گره زمانی دیده می‌شود که همه یهمهٔ فرزندان آن در گراف دیده شده باشند. برای پیاده‌سازی این روش پیمایش، از [[الگوریتم جستجوی اول عمق]] استفاده می‌شود.
* پیمایش عکس پس ترتیب {{انگلیسی|Reverse postorder}}: این ترتیب پیمایش برای تحلیل رو به جلو مناسب است. در این روش هر گره قبل از هر یک از فرزندانش دیده خواهد شد؛ مگر اینکه گره فرزند یک یال رو به عقب داشته باشد. (این روش با پیمایش پیشوندی {{انگلیسی| preorder}} متفاوت است)
 
خط ۶۱:
 
== رویکرد لیست کار ==
این روش، مدل بهبود یافته‌ای از الگوریتم راند-رابین است. در این روش، تکرار تنها در بخشی از گراف که در حال تغییر است انجام می‌شود. در این الگوریتم پس از مقداردهی اولیه، یک لیست به نام لیست کار ایجاد می‌شود که در ابتدای الگوریتم همه یهمهٔ گره‌ها در این لیست قرار دارند. در هر مرحله، یک گره از لیست کار حذف می‌شود و اطلاعات مربوط به جریان داده یدادهٔ آن، مشابه آنچه پیش تر توضیح داده شد، به روزرسانی می‌شود. اگر این به روزرسانی باعث تغییر در اطلاعات گره (حالت گره) شود، همهٔ گره‌هایی که این تغییر اطلاعات روی آنها تأثیر دارد به لیست کار اضافه می‌شوند و این فرایند تا خالی شدن لیست کار ادامه خواهد داشت. شبه کد این الگوریتم مشابه زیر است:<ref name="a"/>
{{چپچین}}
:Worklist ← ∅