一歩一歩アルゴリズムを書く

2938 ワード

原文:
一歩一歩アルゴリズムを書く
【声明:著作権所有、転載歓迎、商業用途に使用しないでください.連絡ポスト:[email protected]
回数の概念は比較的に面白くて、つまりこのような文字列strがあって、長さはnで、今indexは0->index/2から遍歴し始めて、それではstr[inndex]=str[n-1-index]で、それではこのデータは私たちが通常言う回数です.例えばa="a"は回数,a="aba"は回数,a="strarts"も回数である.このテーマは簡単なので、多くの会社がプログラマーの基本的なプログラミング能力をチェックするのが好きです.それだけでなく、プログラマーが問題を綿密に考えているかどうか、異なる角度から考えているかどうかも考察できます.
例えば、文字列の文字は小文字または大文字でなければなりません.他の文字ではありません.どう書けばいいですか.友達はやってみてもいいです.
int isSymbolRight(const char* str, int length)

{

	int index;

	char symbol;



	for(index = 0; index < length; index++){

		symbol = str[index];



		if(symbol >= 'a' && symbol <= 'z' || symbol >= 'A' && symbol <= 'Z')

	        continue;



        return 0;

	}



	return 1;

}



int isAnagramOrNot(const char* str, int length)

{

	int index;



	if(NULL == str || 0 == length)

		return 0;



	if(!isSymbolRight(str, length))

		return 0;



	for(index = 0; index < (length >> 1); index ++){

		if(str[index] != str[length -1 -index])

			return 0;

	}



	return 1;

}
上記の方法は伝統的な比較方法にすぎませんが、面接の試験官が再帰的な方法で計算すると言ったらどうしますか.友達はもう一度やってみてもいいです.
int _isAnagramOrNot(const char* str, int length){

	if(0 == length || 1 == length)

		return 1;



	return (str[0] == str[length -1]) ? _isAnagramOrNot(str +1, length-2) : 0;

}



int isAnagramOrNot(const char* str, int length)

{

	if(NULL == str || 0 == length)

		return 0;



	if(!isSymbolRight(str, length))

		return 0;



	return _isAnagramOrNot(str, length);

}
では、より難易度を高め、比較データが多く、1000万個ある場合、マルチコアプログラミングを利用してデータの処理速度を高めるにはどうすればいいのでしょうか.
int _isAnagramOrNot(const char* str, int start, int end, int length)

{

	int index;

	char symbol;



	for(index = 0; index < length; index ++){

		if(str[start + index] != str[end -1 - index])

			return 0;



		symbol = str[start + index];

		if(symbol >= 'a' && symbol <= 'z' ||

			symbol >= 'A' && symbol <= 'Z')

			continue;



		return 0;

	}



	return 1;

}



int isAnagramOrNot(const char* str, int length)

{

	int index;

	int start[2];

	int end[2];

	int result[2] = {0};



	if(NULL == str || 0 == length)

		return 0;



	start[0] = 0;

	start[1] = length >> 2;

	end[0] = length;

	end[1] = length - (length >>2);



#pragma omp parallel for

	for(index = 0; index < 2; index ++)

		result[index] = _isAnagramOrNot(str, start[index], end[index], length >> 2);



	return (result[0] && result[1]) ? 1 : 0;

}

まとめ:
(1)上記の問題から分かるように、簡単な問題であっても、応募者の総和能力を考察することができる
(2)アルゴリズムの実行効率を高める方法が多く,友人たちは普段の授業で注意し,蓄積することができる.
(3)すべてのアルゴリズムの実行は正確性と頑丈性を前提としており,十分なテストの基礎の上に構築しなければならない.