سلام در طراحی الگوریتم ما انواع الگورتیم های مرتب سازی و جستجو داریم مانند مرتب سازی حبابی، جستجوی دودویی  quick sort، merge sort و غیره. بهترین الگوریتم در کمترین بازه زمانی رسیدن به جواب درست مسئله می باشد. در این آموزش قصد ندارم الگوریتم هارا با هم مقایسه بکنم، در این آموزش شما یادمیگیرد که چگونه زمان اجرای کد های موردنظرتان را محاسبه کنید.

کد برنامه محاسبه زمان اجرای کد موردنظرتان در جاوا:

package com.company;
import java.util.concurrent.TimeUnit;
// Program to measure elapsed time in Java
class Main
{
    public static void main(String[] args) throws InterruptedException {
        //شروع زمان با تابع nanoTime() نیاز به اضافه کردن کتابخانه ای نیست
        long startTime = System.nanoTime();
        /* ... the code being measured starts ... شروع کد هایی که مایل هستید زمان اجرای آن ها محاسبه شود */
        /*برای محاسبه زمان کد برنامه با استفاده از کتابخانه TimeUnit برای تست 5 ثانیه برنامه را در خط پائین متوقف می کنیم
         کد پائین اختیاری است*/
        
        TimeUnit.SECONDS.sleep(5); // sleep for 5 seconds
        //چاپ اعداد بین صفر تا ده اینقدر سرعت محاسبه خط پائین بالاست مجبور شدم در خط بالا برنامه و در 5 ثانیه متوقف بکنم
        
        for (int i = 0 ; i <= 10; i++)  {
            System.out.println("عدد: " + i); //print number between 0 and 10
        }
        /* ... the code being measured ends ... پایان کد هایی که مایل هستید زمان اجرای آن ها محاسبه شود*/
        
        long endTime = System.nanoTime(); // دومرتبه زمان سپری شده را میگیریم
        
        long timeElapsed = endTime - startTime; // محاسبه اختلاف دو زمان جواب درست بدست می آید
        /* بدلیل اینکه تابع nanoTime زمان اجرای Jvm را بر میگرداند و ما فقط زمان اجرای
        کد مورنظر خودمان را میخواهیم مجبور هستیم این دو تایم را با هم تفریق بکنیم */
        System.out.println("زمان اجرای کدهایی که مایل بودید محاسبه کنید بر nanoseconds  : " + timeElapsed);
        System.out.println("زمان اجرای کدهایی که مایل بودید محاسبه کنید بر milliseconds : " +
                timeElapsed / 1000000);
    }
}

خروجی برنامه محاسبه زمان اجرای کد موردنظرتان در جاوا:

عدد: 0
عدد: 1
عدد: 2
عدد: 3
عدد: 4
عدد: 5
عدد: 6
عدد: 7
عدد: 8
عدد: 9
عدد: 10
زمان اجرای کدهایی که مایل بودید محاسبه کنید بر nanoseconds  : 5031784000
زمان اجرای کدهایی که مایل بودید محاسبه کنید بر milliseconds : 5031

نکته: بدلیل استفاده کد زیر برنامه 5 ثانیه دیر تر اجرا می شود.

  TimeUnit.SECONDS.sleep(5);

علت محاسبه اختلاف دو متغیر  startTime  و endTime که هر دو مقدار تابع  System.nanoTime(); را دارند چیست؟

این تابع به ما زمان جاری اجرای JVM's high-resolution را بر میگرداند ولی ما فقط زمان اجرای کد موردنظرمان را میخواهیم و به همین دلیل یک بار قبل و بعد از کد مان تابع System.nanoTime(); در دو متغیر  startTime و endTime فراخوانی میکنیم و اختلاف این دو متغیر تقریبا زمان اجرای کد مورد نظرمان می باشد.