ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘...11
    일지 2021. 6. 22. 21:40

    테스트용 난수 생성 및 시간 체크 함수 구현

    알고리즘의 효율성 테스트를 위해 1,000,000 개의 난수를 생성하여 텍스트 파일로 저장 및 불러오기 함수 구현

     

    common.hpp

    #pragma once
    #include <iostream>
    #include <fstream>
    #include <ctime>
    
    #define MAKE_RANDOM_NUMBERS
    
    #ifdef MAKE_RANDOM_NUMBERS
    #include <random>
    #include <limits>
    #endif
    
    namespace Common
    {
    #ifdef MAKE_RANDOM_NUMBERS
    	int* GenerateRandomNumber(int n = 100'000)
    	{
    		std::default_random_engine randomEngine;
    		std::uniform_int_distribution<int> distribution(0, INT_MAX);
    
    		int* arr = new int[n];
    		for (int i = 0; i < n; ++i)
    		{
    			arr[i] = distribution(randomEngine);
    		}
    
    		return arr;
    	}
    
    	void MakeRandomNumbersFile(int n = 100'000)
    	{
    		int* arr = GenerateRandomNumber(n);
    
    		std::ofstream ofs("./Randoms.txt");
    
    		ofs << n << "; ";
    		for (int i = 0; i < n; ++i)
    		{
    			ofs << arr[i] << "; ";
    		}
    
    		ofs.close();
    	}
    #endif
    
    #pragma region 파일 입출력
    	int LoadRandomNumbersInFile(int** arr)
    	{
    		std::ifstream ifs("./Randoms.txt");
    
    		int n;
    		ifs >> n;
    
    		*(arr) = new int[n];
    		for (int i = 0; i < n; ++i)
    		{
    			ifs >> (*arr)[i];
    		}
    
    		ifs.close();
    
    		return n;
    	}
    #pragma endregion
    	
    #pragma region 시간 측정
    	std::clock_t startTime;
    	std::clock_t endTime;
    
    	void StartClock()
    	{
    		startTime = std::clock();
    	}
    
    	void StopClock()
    	{
    		endTime = std::clock();
    	}
    
    	void PrintElapsedTime()
    	{
    		std::clock_t elapsed = endTime - startTime;
    
    		double timeSecond = static_cast<double>(elapsed / CLOCKS_PER_SEC);
    
    		std::cout << "total time is " << timeSecond << "s ( " << elapsed << "ms )\n";
    	}
    #pragma endregion
    }

     

    선택 정렬 시간 측정

    main.cpp

    #include "Sort/SelectionSort.hpp"
    #include "Common.hpp"
    
    int main()
    {
    	int n = 10;
    	int* arr;
    
    	// 동작 테스트를 위한 값
    	//arr = new int[n]{ 2, 4, 6, 8, 10, 9, 7, 5, 3, 1 };
    
    	// 시간 테스트를 위한 값
    	n = Common::LoadRandomNumbersInFile(&arr);
    
    	Common::StartClock();
    	SelectionSort(arr, n/*/, true/**/);
    	Common::StopClock();
    	Common::PrintElapsedTime();
    
    	delete[] arr;
    }

     

    측정 결과

    total time is 452s ( 452361ms )

     

    Algorithm/Randoms.txt at main · NadanKim/Algorithm · GitHub

     

    NadanKim/Algorithm

    알고리즘 학습 및 예제 코드 작성을 위한 저장소. Contribute to NadanKim/Algorithm development by creating an account on GitHub.

    github.com

     

    댓글

Designed by Tistory.