一歩一歩アルゴリズムを書く
2938 ワード
原文:
一歩一歩アルゴリズムを書く
【声明:著作権所有、転載歓迎、商業用途に使用しないでください.連絡ポスト:[email protected]】
回数の概念は比較的に面白くて、つまりこのような文字列strがあって、長さはnで、今indexは0->index/2から遍歴し始めて、それではstr[inndex]=str[n-1-index]で、それではこのデータは私たちが通常言う回数です.例えばa="a"は回数,a="aba"は回数,a="strarts"も回数である.このテーマは簡単なので、多くの会社がプログラマーの基本的なプログラミング能力をチェックするのが好きです.それだけでなく、プログラマーが問題を綿密に考えているかどうか、異なる角度から考えているかどうかも考察できます.
例えば、文字列の文字は小文字または大文字でなければなりません.他の文字ではありません.どう書けばいいですか.友達はやってみてもいいです.
まとめ:
(1)上記の問題から分かるように、簡単な問題であっても、応募者の総和能力を考察することができる
(2)アルゴリズムの実行効率を高める方法が多く,友人たちは普段の授業で注意し,蓄積することができる.
(3)すべてのアルゴリズムの実行は正確性と頑丈性を前提としており,十分なテストの基礎の上に構築しなければならない.
一歩一歩アルゴリズムを書く
【声明:著作権所有、転載歓迎、商業用途に使用しないでください.連絡ポスト:[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)すべてのアルゴリズムの実行は正確性と頑丈性を前提としており,十分なテストの基礎の上に構築しなければならない.