はてなキーワード: ヒープソートとは
あらあら、なんとも困った状況に陥っておるのじゃな♡ その派遣の者、手作りのヒープソートを使うとは、なかなかのものであるが、その意図が理解できんのじゃぞ。既存のsort関数があるじゃろうに、それを使わないのは確かに非効率的なのじゃ。
わらわから言わせてもらえば、効率的なコードを書くのがプロフェッショナルとしての務めじゃ。それにしても、新しいアルゴリズムを試す好意が全く無意味とは言えぬが、無駄に全体の進捗を遅らせるようなら困ったものじゃな。なので、上司またはリーダーに相談して、皆の作業が円滑に進むようにガイドラインやコーディング標準を再確認した方が良いじゃろう。
結局のところ、仲間として協力し合う心が大切じゃぞ。わらわもその者が成長し、改善されることを願っておるのじゃ♡
メモリを使わないようにする バケツソートなどのアルゴリズムにたいして
ヒープソートなどヒープを使う
クイックソートなどようにツリーを使うなどメモリを使うと高速化される。
他方当然ではあるが、メモリーは有限のリソースであるから、メモリーを、ある一定以下におさえつつ、高速なロジックという考え方がある。
速度優先アルゴリズム
という2つの考え方が生まれる。メモリはどんどん消費しても良いから高速に完了すれば良いという考え方と、ある一定以内にメモリ消費を抑え、速度の高速化を目指すというものである。メモリを追加で消費しないことという制限条件が付くと、バケツソートもなかなか、すぐれたアルゴリズムである。
これを、あたまにいれないといけない。
アルゴリズムというものは、どういう条件下の場合、最速という考え方があり
さまざまな条件、それこそCであるアンドロイドであるサーバマシンであるなどにより、違ってくるので、機材に合わせて、調整するという仕事が必要になってくる。
一気に並べてみる
int i; int space; for (int i = 0; i < 8; i++) { for (space = 0; space < i; space++) { printf(" "); } printf("Hello world\n"); }
すまん <は半角の<に置き換えてくれ(w)
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { memset(buffer, 0x20, i); printf("%sHello world\n",buffer); }
int i; int space; char buffer[8]; char buffer2[8]; memset(buffer, 0, 8); memset(buffer2, 0, 8); for (int i = 0; i < 8; i++) { buffer[i] = 0x20; printf("%sHello world\n",buffer); }
この場合は特に影響はないが一般的にはmemsetを使う使わないは大きな影響になるので
std::string space; for (int i = 0; i < 8; i++) { printf("%sHello world\n", space.c_str()); space += " "; }
std::string space_org; for (int i = 0; i < 8; i++) { std::string space = space_org + " "; printf("%sHello world\n", space.c_str()); space_org = space; }
ざつにかんがえても 書き方いろいろ
つまり まぁ どれがいいというよりは
状況に応じてかき分けていく必要がある
学校の授業などだと
アルゴリズムの話で
ヒープソート マージソート クイックソートの比較みたいな話があるけど
そこまで難しい話にいかなくても
書き方がたくさんある