فرض کنید ۲ تا تابع داریم که هر دو پیچیدگی زمانی O(n) دارن. این لزوما به این معنی نیست که هر دو در عمل یک سرعت اجرا دارن. مثال رو در نظر بگیرین.
print_items و print_items2 هر دو یکبار روی لیست حلقه میزنن. اما print_items سریعتره؛ چون یک ثانیه مکث برای پرینت هر آیتم رو نداره.وقتی که میگیم پیچیدگی زمانی O(n) هست، منظورمون اینه که زمان اجرای اون با رشد n به صورت خطی رشد میکنه. در اصل داریم میگیم c * n که این c یه مقدار زمان ثابته که الگوریتم ما میگیره. مثلا برای
print_items ممکنه 10ms و برای print_items2 همون 1s باشه. اگر دو الگوریتم پیچیدگی زمانی big O متفاوتی داشته باشن، معمولا مقدار c رو نادیده میگیریم. مثلا بین جستجوی باینری و جستجوی خطی، مقدار c تاثیری نداره؛ چون در نهایت جستجوی باینری سریعتره.
یه نمونه از زمانی که مقدار ثابت c اهمیت پیدا میکنه، quick sort در برابر merge sort ه. quick sort مقدار ثابت c کوچکتری از merge sort داره. پس اگه جفتشون O(n log n) باشن، quick sort سریعتره.
#Grokking_Algorithms #algorithm
@techstuff100
