دور اویلری

از testwiki
پرش به ناوبری پرش به جستجو

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

دور اویلری زمانی وجود دارد که گراف همبند باشد و درجه هر رأس زوج باشد، یعنی تعداد یال‌های متصل به آن عددی زوج باشد. به یک گراف، گراف اویلری گفته می‌شود اگر و فقط اگر گراف همبند باشد و درجه تمام رأس‌های آن زوج باشد. (با فرض اینکه مؤلفه بدیهی نداشته باشیم)[۱]

کاربردها

مسیرهای اویلری در بیوانفورماتیک برای بازسازی توالی دی‌ان‌ای (توالی اسید نوکلئیک) از قطعات آن مورد استفاده قرار میگیرد.[۲] مسیرهای اویلری همچنین در طراحی مدار CMOS برای پیدا کردن ترتیب دروازه منطقی بهینه مورد استفاده قرار می گیرند.[۳] مضاف بر این الگوریتم‌های متعددی برای پردازش درخت‌ها وجود دارد که از دورهای اویلری استفاده می‌کنند.[۴][۵]

تعداد دورهای اویلری

مک‌کِی و رابینسون اثبات کردند که تعدادِ دورهای اویلری در گرافهای کامل به فرمول پایین میل می‌کند:[۶]

ec(Kn)=2(n+1)/2π1/2en2/2+11/12n(n2)(n+1)/2(1+O(n1/2+ϵ)).

بعدها ایزائف اثبات کرد تعداد دورهای اویلری در گرافهای کامل دو بخشی به صورت مجانبی برابر است با:[۷]

ec(Kn,n)=(n/21)!2n2n2n+1/2πn+1/2nn1(1+O(n1/2+ϵ)).
گراف مسئله پل‌های کونیگسبرگ. این گراف اویلری نیست و دور اویلری ندارد.
درجه تمام رأس‌ها در این گراف زوج است بنابراین دور اویلری دارد. دنبال کردن یال‌ها بر اساس ترتیب الفبایی دور را مشخص می‌کند

الگو:پاک‌کن

الگوریتم

الگوریتم پیدا کردن مدار اویلری: الگو:چپ‌چین

# include <stdio.h>
# include <math.h>
# define max 100

double f(double y);
void copyarray(double[], double[]);

int k, i;

double y[max];
double x[max];

int
main(void)
{
  FILE *file;

  double h, x, y;

  printf("this program does a first order ODE for dy/dx=-y+1 with initial condition of y(0)=0 from x=0 to x=0.9\n");
  printf("input the step size (h>0):\n");

  scanf("%lf",&h);

  k = (int)((0.9-0)/h);

  x[0] = 0;
  y[0] = 0;

  file = fopen("euler.data", "w");

  for(i=0; i<k; i++)
  {
  x[i+1] = x[i] + h;

  y[i+1] = y[i] + h * f(y[i]);

  fprintf(file,"4.2%lf\t4.2%lf\n", x[i], y[i]);
  }

  fclose(file);

  return 0;

}

double
f(double y)
{
  int i;
  double sum, ysum;

  copyarray(x,y);

  for(i=0; i<k; i++)
  ysum=-y[i];

  sum = ysum+1;

  return (sum);
}

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

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

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

منابع

الگو:پانویس

  1. N. L. Biggs, E. K. Lloyd and R. J. Wilson, Graph Theory 1736–1936, Clarendon Press, Oxford, 1976, 8–9, الگو:ISBN.
  2. الگو:Cite journal
  3. الگو:Cite journal
  4. الگو:Cite journal
  5. الگو:Cite journal
  6. Brendan McKay and Robert W. Robinson, Asymptotic enumeration of eulerian circuits in the complete graph, Combinatorica, 10 (1995), no. 4, 367–377.
  7. الگو:Cite journal