일지

알고리즘...11

niamdank 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