CHOU
[Abe先生の授業] プログラム応用講義資料 (Chapter1) 본문
Abe 교수님은 우리 연구실 제일 어른이신 분인데 Tanaka 교수님께서 4학년 수업이지만 지도 교수님 수업이니까 들어보라고 하셔서 들은 수업이다. 주로 이미지 프로세싱에 관해 배우고 선수 과목은 Visual C++ 이다.
오늘은 간단한 수업의 강의와 가볍게 풀어보라는 퀴즈를 내주셨는데 다음과 같다.
プログラム応用課題1
一般にn個のデーターを処理するプログラムの計算量は logn, n, nlogn, nの2乗,……となる.
配列 v[0] からv[n-1] にn個のデーターが入っているとする.
(1)n個のデーターが, v[i]≦v[i+1] (ただし,0≦i≦n-2)を充たすようにデーターを並び替えるプログラムを下記に従って2つ作成しなさい,
[A] プログラムの計算量がデーターの個数nの2乗に比例するもの
아마도 버블정렬(Bubble Sort)을 만들어 보라고 하신거 같아서 개선하지않은 단순한 버블정렬을 만들어 보았다.
#include "bubbleSort.h"
void bubbleSort::bubble_sort(int a[], int n)
{
//variable declare
int i, j, t, d;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-i; j++)
{
if(a[j-1] > a[j])
{
//calcualation
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
//test debugging
for(d=0; d<n; d++)
{
printf("%d, ",a[d]);
}//end for
printf("\n");
}//end if
}//end for j
}//end for i
}
[B] 最悪の場合を除いて,計算量が[A]を凌ぐもの.
#include "quickSort.h"
{
int v, t;
int i, j;
{
v = a[n-1];
j = n -1;
{
while (a[++i] < v);
while (a[--j] > v);
if (i >= j)
break;
a[i] = a[j];
a[j] = t;
a[i] = a[n-1];
a[n-1] = t;
quick_sort(a+i+1, n-i-1);
}//end if
//for(int x=0; x<n; x++)
//{
// printf("%d, ", a[x]);
//}
(2) (1)で並び替えられた配列の中にある数が含まれているか否かを調べるプログラムを下記に従って2つ作成しなさい.
[C] プログラムの計算量がデーターの個数nに比例するもの
순차 검색을 만들어 보았다.
#include "sequentialSearch.h"
int sequentialSearch::li_search(int key, int a[], int *num)
{
int i=0;
while ( (a[i] != key) && (i < *num) )
i++;
return(i < *num ? i : -1);
}
[D] 計算量が[C]を凌ぐもの.
이분 검색을 만들어 보았다.
#include "binarySearch.h"
int binarySearch::bi_search(int key, int a[], int n)
{
int mid = 0;
int left = 0;
int right = n-1;
while(right >= left)
{
mid = (right + left) / 2;
if(key == a[mid])
return mid;
if(key < a[mid])
right = mid -1;
else
left = mid + 1;
}//end while
return -1;
}
プログラムを配列でなくポインターを使って書き直す.