PDA

View Full Version : ساده کردن در درخت عبارت



zedatar
یک شنبه 02 خرداد 1389, 12:46 عصر
سلام

من میخواهم یک عبارت جبری درون یک درخت عبارت را ساده کنم مثلا:

2x^2+3x^2+2xy=5x^2+2xy:متفکر:

لطفا در مورد طریقه پیاده سازی اش مرا راهنمایی کنید

armiya
دوشنبه 03 خرداد 1389, 01:55 صبح
اولین کاری که می کنی تعیین اولویت هاست یعنی چی یعنی با استفاده از پرانتز گزاری اولویت هات رو مشخص می کنی سپس پایین تریین اولویت عملوندی میشه ریشه درخت شما و بالاترین اولویت شما می شود برگ ها با merg کردن این برگ ها نتیجه را از سطح i ام به سطح i-1 منتقل می کنی و به همین تر تیب نکته اخ اینکه بعد از یرا نتز گزاری با استفاده از ارایه می تونی این کار رو انجام بدی و درخت دودویی رو تشکیل داده و عبارت را محا سبه کن


------------------------------------------------------------------------------------------------
دوست داشتی تشکر کن :
موفق باشی

zedatar
دوشنبه 03 خرداد 1389, 11:05 صبح
منظورت را از merg نمیفهمم
ساخت درخت دودویی اش را بلدم
مشگلم ابنه که چه جوری باید سادش کنم !

armiya
سه شنبه 04 خرداد 1389, 03:22 صبح
خواب فرض کن که درختت بصورت دودیی رو ایجاد کردی از اخر ارایه به اول شروع به پیمایش کن هر نودی که پیدا می کنی رو با استفاده از فرمول 2i و 2i+1 فرزندانش رو پیدا کن فقط دقت کن که باید از پایین بیای بالا سپی با عملگر parent عملیاتت روش انجام بده و جوابش رو بذار تو جای پدرش و این روال رو تا اخر ادامه بده .

فرض کن عبارت x^2 رو می خوای محاسبه کنی اول می ایی توان رو پیدا میکنی سپس xرو به توان 2 میرسونی بعد مقدارش رو می گذاری در خانه توان .
البته روش های دیگری هم وجود داره کمی فکر کن.


-------------------------------------------------------------------------------------------------
موفق باشی

zedatar
یک شنبه 16 خرداد 1389, 21:41 عصر
سلام
من نتونستم یک عبارت جبری را با درخت ساده کنم بنابرین این کار را با لیست پیوندی انجام دادم
توضیحات :
1.هر متغیر در یک ند است.


2.ساختمان داده به کار رفته دران به صورت زیر است:

هر ند دارای 6 قسمت است

next1

2 prev

3 zarib

4 paye

5 tavan

6 bache

1 اشاره به ند بعدی

2 اشاره به ند قبلی

3 اشاره به مکانی که ضریب جمله در ان است ( برای ند هایی که بچه هستند حاوی * ویا / بین دو متغیر است )

4 اشاره به مکانی که پایه در ان است

5 اشاره به مکانی که توان در ان است

6 اشاره به متغیر دوم به کار رفته در جمله


من ساده کردن را برای جمله هایی که دارای 2 متغیر یا کمتر است انجام دادم .
البته برای متغیر های بیشتر هم با یک تغییر کوچک امکان پذیر است.

کد ان را میگذارم:




void sade()
{
int sum;
node <T> *P,*q;
p=first;
q=p->next;
if ( first==NULL )
return;
else
{
while (p!=NULL)
{
sum=p->zarib;
while(q!=NULL)
{
if (p->paye==q->paye)
if (p->tavan==q->tavan)
if((p->bache!=NULL)&&(q->bache!=NULL))
{
if (p->bache-> zarib ==q->bache->zarib)
if(p->bache->paye==q->bache ->paye)
if(p->bache->tavan==q->bache->tavan)
{
sum=sum+q->zarib;
p->next=q->next;
q->prev=NULL;
q->next=NULL;
p=p->next;
q=p->next;
}

}
else
{
sum=sum+q->zarib;
p->next=q->next;
q->prev=NULL;
q->next=NULL;
p=p->next;
q=p->next;
}
q=q->next;
}
p=p->next;
}
}
}

tooraj_azizi_1035
دوشنبه 26 مهر 1389, 11:30 صبح
سلام،
اگه تو یه درخت توان رو تو هر گره ذخیره کنیم و ضریب رو هم ذخیره کنیم با پیدا کردن توان می تونیم ضریب رو Update کنیم 3 با مواجهه 2 برابر 5 می شه.