زمان کنونی: ۰۵ اردیبهشت ۱۴۰۴, ۰۶:۴۰ ب.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

مرتبه زمانی این تابع با روش تغییر متغیر؟

ارسال:
  

ƊƦЄƛM پرسیده:

مرتبه زمانی این تابع با روش تغییر متغیر؟

سلام
لطفا یکی مرتبه زمانی تابع T(n) = 2T(n/2) + n/logn با روش تغییر متغیر توضیح بده.

ممنون
نقل قول این ارسال در یک پاسخ

۱
ارسال:
  

fatemeh69 پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

به جایn, مقدار 2k را قرار می دهیم
و معادله ی زیر به دست میاد
T(2k)=2T(2k2)2klog2k
خب می دانیم که در تقسیم دو عدد توان دار با پایه های یکسان توان ها از هم کم می شوند
پس 2k2=2k1
از طرفی می دانیم که در لگاریتم توان به ضریب تبدیل می شود پس:
log2k=klog22=k
حالا می بیینم متغیر های T در وراقع توان ها هستند یعنی چیزی ه دارد در ورودی های T عوض می شوند توان است
پس به جای کار کردن با اعداد های توان دار با خود توان ها کار می کنیم
یه تابع جدید تعریف می کنیم که به جای وابسته بودن به یک عدد توان دار به خود توان وابسته باشد
مثلا:
T(2k)=S(k)
پس معادله ی بالا رو می شه به این صورت بازنویسی کرد:
S(k)=2S(k1)2k\k
اسم این معدله رو می ذاریم *
حالا باید زمان این معادله رو بدست بیاریم:
من از روش جایگذاری حل می کنم
s(k) به S(k-1) وابسته س خب مقدار S(k-1) چیست؟
اگه تو همون معادله * به جای K، عدد k-1 بذارم بدست میاد میشه :
S(k1)=2S(k2)2k1k1
خب حالا این رو تو معادله قبلی جایگذاری می کنم میشه:
S(k)=2(2S(k2)2k1k1)2kk
S(k)=4S(k2)2kk12kk
خب حالا مقدار S(k-2) چیست؟
اگه تو همون معادله * به جای K، عدد k-2 بذارم بدست میاد میشه :
S(k2)=2S(k3)2k2k2
که اگه تو معدله قبلی بذارم می شه:
S(k)=4(2S(k3)2k2k2)2kk12kk
S(k)=8S(k3)2kk22kk12kk
خب دیگه بقیه ش واضحه
واضحه که هر چی به عقب بریم صورت تغییری نمی کنه و فقط یه واحد از مخرج کم می شه
با خودمون می گیم این روند تا ککی ادامه داره؟
تا وقتی که مخرج به عدد ۱ برسه پس می توان معادله * را به این صورت باز کرد:
S(k)=2k12k2...2kk22kk12kk
خب حالا از مقدار دو به توان k فاکتور می گیریم:
S(k)=2k(1112...1k21k11k)
مقدار داخل پرانتز رومی دانیم برابر است با logk
پس:
S(k)=2klogk
اما این پیچیدگی S(k) است نه T(n).

یادمونه که چجوری T(2^k) رو برابر S(k) قرار دادیم
و می دانیم وقتی n برابر است با دو به توان k
پس k برابر است با logn
T(n)=T(2k)=S(k)=O(2klogk)=O(nloglogn)
نقل قول این ارسال در یک پاسخ

ارسال:
  

reza777gh پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

(۲۱ مرداد ۱۳۹۳ ۰۷:۵۷ ب.ظ)fatemeh69 نوشته شده توسط:  سلام ممنون از توضیحات کاملتون
برای من یه سوال پیش اومد:
چرا وقتی این جایگزینی رو انجام دادین:
T(2k)=S(k)

S(k)=2S(k1)2kk

کسری که در آخر هست رو نغییر ندادید؟ مگرنه باید هرجایی که ۲ به توان k هست رو باید با k جایگزین کرد؟!
پس معادله ی بالا رو باید به این صورت بازنویسی کرد:

S(k)=2S(k1)klogk

ممنون میشم اگه جواب بدید
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

fatemeh69 پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

(۲۲ مرداد ۱۳۹۳ ۰۹:۳۹ ق.ظ)reza777gh نوشته شده توسط:  کسری که در آخر هست رو نغییر ندادید؟ مگرنه باید هرجایی که ۲ به توان k هست رو باید با k جایگزین کرد؟!
پس معادله ی بالا رو باید به این صورت بازنویسی کرد:

S(k)=2S(k1)klogk

ممنون میشم اگه جواب بدید

خیر ما فقط نماد گذاری رو عوض کردیم
ما تصمیم کرفتیم از یه جایی به بعد به جای هر نماد T(2k) ای که دیدیم به جاش S(k) بذاریم
تابع T(2k) یه تابعی بوده بر حسب دو به توان K
یعنی دو به توان k رو می گرفته یه بلاهایی سرش در می آورده یه خروجی به ما می داده
حالا ما میگیم ما یه تابع نظیر داریم که همین کارهارو رو k انجام می ده یعنی این تابع ما به جای این که دو به توان k بگیره و یه خروجی بده عدد k رو می گیره و همون خروجی تابع T رو می ده.
و ما از این تساوی T(2k)=S(k) فقط برابر بودن این دو تابع به ازای مقادیر متناسب ورودی شونو می شناسیم و با دیدن ایk تساوی نمی تونیم بفهیمم که دو به توان k را باید با k جایگذاری کرد.
اگر بخواهیم بدانیم طبق این تساوی دو به توان k را باید با چه چیزی جایگذاری کرد از طرفین تساوی T(2k)=S(k) عملگر T1می گیریم پس می شود:
2k=T1(S(k))
پس از تساوی فوق به این نتیجه می رسیم که باید به جای هر 2k مقدار T1(S(k)) را قرار دهیم (نه مقدار k)
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

reza777gh پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

(۲۲ مرداد ۱۳۹۳ ۱۱:۰۲ ق.ظ)fatemeh69 نوشته شده توسط:  خیر ما فقط نماد گذاری رو عوض کردیم
ما تصمیم کرفتیم از یه جایی به بعد به جای هر نماد T(2k) ای که دیدیم به جاش S(k) بذاریم
تابع T(2k) یه تابعی بوده بر حسب دو به توان K
یعنی دو به توان k رو می گرفته یه بلاهایی سرش در می آورده یه خروجی به ما می داده
حالا ما میگیم ما یه تابع نظیر داریم که همین کارهارو رو k انجام می ده یعنی این تابع ما به جای این که دو به توان k بگیره و یه خروجی بده عدد k رو می گیره و همون خروجی تابع T رو می ده.
و ما از این تساوی T(2k)=S(k) فقط برابر بودن این دو تابع به ازای مقادیر متناسب ورودی شونو می شناسیم و با دیدن ایk تساوی نمی تونیم بفهیمم که دو به توان k را باید با k جایگذاری کرد.
اگر بخواهیم بدانیم طبق این تساوی دو به توان k را باید با چه چیزی جایگذاری کرد از طرفین تساوی T(2k)=S(k) عملگر T1می گیریم پس می شود:
2k=T1(S(k))
پس از تساوی فوق به این نتیجه می رسیم که باید به جای هر 2k مقدار T1(S(k)) را قرار دهیم (نه مقدار k)

من خیلی وقته که دنبال فهمیدن این روش هستم و خیلی خوشحال شدم که دیدم به این خوبی توضیح دادی شماRolleyes
فکر کنم با مبحث لاپلاس درس معادلات(که اون رو هم بلد نیستمTongue) قاطی کردم!

واقعا ممنون!
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

bahman2000 پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

سلام خانم fatemeh69 از پاسخ جامع و کاملی که برای این سوال ارائه دادید ممنونم. فقط بنده یه مشکلی دارم و می خوام بدونم شما به هنگام تعیین مرتبه s(k) حالت پایه s(0)=0 رو از کجا فهمیدید؟
نقل قول این ارسال در یک پاسخ

ارسال:
  

fatemeh69 پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

(۲۱ مرداد ۱۳۹۳ ۱۰:۳۸ ب.ظ)bahman2000 نوشته شده توسط:  سلام خانم fatemeh69 از پاسخ جامع و کاملی که برای این سوال ارائه دادید ممنونم. فقط بنده یه مشکلی دارم و می خوام بدونم شما به هنگام تعیین مرتبه s(k) حالت پایه s(0)=0 رو از کجا فهمیدید؟
می دونیم که S(0) بالاخره مساوی با یه عددی است (منظورم اینه که مساوی با یه تابع یا وابسته به متغیری نیست)
پس نهایتا s(0) مساوی هر عددی باشه بالاخره تو پیچیدگی تاثیری نداره چون 2klogk به علاوه یه عددی (که نمی دونیم چیه از مرتبه ی 2klogkاست و مقدار اون عدد تو پیچیدگی تاثیری نداره
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ

ارسال:
  

۹۰۱۸۴۵ پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

این سوال با درخت راحت تر حل میشه...اگه بخواهید من بروش درخت بهتون توضیح میدم
نقل قول این ارسال در یک پاسخ

ارسال:
  

saleh330 پاسخ داده:

RE: مرتبه زمانی این تابع با روش تغییر متغیر؟

به روش تغییر متغیر :
n=2^k =>T(2^k)=2T(2^k-1)+2^k/k
hameye moadele ro taghsim bar 2^k mikonim badesh taghire nam midim.
s(k) =s(k-1)+1/k
ke inam rahat hal mishe.

Sent from my Nexus 7 using Tapatalk
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
Exclamation سلام لطفاً یکی به من بگه مرتبه زمانی ها چطوری به log تبدیل میشن فرمول داره؟؟ Azadam ۶ ۵,۵۲۲ ۰۶ دى ۱۴۰۰ ۰۹:۰۲ ق.ظ
آخرین ارسال: Soldier's life
  کمک در باره این تروجان Ghasemiyeh ۲ ۳,۲۵۳ ۲۵ آذر ۱۴۰۰ ۰۳:۰۰ ق.ظ
آخرین ارسال: one hacker alone
  مرتبه ایجاد درخت rad.bahar ۱ ۳,۵۶۹ ۳۰ مهر ۱۳۹۹ ۰۳:۳۴ ب.ظ
آخرین ارسال: rad.bahar
  مرتبه شبه کد rad.bahar ۱ ۲,۵۱۰ ۲۲ مهر ۱۳۹۹ ۰۹:۳۲ ب.ظ
آخرین ارسال: BBumir
  چگونه این خطا را موقع اجرای sql server 2014 رفع کنم ؟ farahnaz ۲ ۳,۳۱۳ ۱۹ مهر ۱۳۹۹ ۰۲:۱۸ ق.ظ
آخرین ارسال: farahnaz
  تغییر رشته برای کنکور rezap13 ۰ ۱,۹۸۸ ۰۴ شهریور ۱۳۹۹ ۱۲:۲۰ ب.ظ
آخرین ارسال: rezap13
  حل مساله مرتبه زمانی حلقه های تو در تو sarashahi ۱۶ ۲۴,۱۰۱ ۱۹ خرداد ۱۳۹۹ ۰۱:۱۶ ب.ظ
آخرین ارسال: gillda
  تابع مولد ss311 ۰ ۱,۶۰۲ ۲۶ اردیبهشت ۱۳۹۹ ۱۲:۴۹ ب.ظ
آخرین ارسال: ss311
  مرتبه زمانی Sanazzz ۱۷ ۲۲,۷۵۵ ۰۹ اردیبهشت ۱۳۹۹ ۰۶:۴۶ ب.ظ
آخرین ارسال: mohsentafresh
  پیچیدگی زمانی اکشن های قابل اعمال در یک وضعیت اsepid8994 ۰ ۱,۹۱۸ ۲۹ اسفند ۱۳۹۸ ۱۲:۵۱ ب.ظ
آخرین ارسال: اsepid8994

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close