ノーローンのサイトです。
ランキング 即時 一般 禁止 紙面 ひどい いっさい キャッシュ 書い 誰か 特に 無い 応じ ノウハウ 貪っ 落し穴 ポイント いまだ 相当 借り入れる 収入 様々 再び 決まっ スタート 条件 クーリングオフ 取り立て 出し 複利

ぐらいとは?/ ノーローン

[ 448] 404 Blog Not Found:プログラマーでなくても名前ぐらい覚えておきたいアルゴリズムx10
[引用サイト]  http://blog.livedoor.jp/dankogai/archives/50957658.html

あなたが一番好きなアルゴリズムを教えてください。 また、その理由やどんな点が好きなのかも教えてください。 - 人力検索はてな
なぜぎくってしているかというと、実はすでにアルゴリズム本の発注を受けているからなのだ。いつまでも伏せておくのもなんなので、ここにえいやっとdiscloseしてしまうことにする。
その下書きもかねて、そこでも紹介しないわけに行かないメジャーなアルゴリズムをとりあえず10個紹介しておくことにする。
これまた古典アルゴリズムの代表。あまりに大きな数の素数判定には向かないが、32bit程度であれば今でも実用的である。
順番通り並んでいるものから目的のものを取り出すときに、まず真ん中を見て、それより前なら半分戻り、それより後なら半分進みを繰り返していけば、必ず目的のものが見つかるか、目的のものが存在しないかがわかる。
一般的なソートアルゴリズムとして、現代もっとも使われているのがこちら。クイックソートほど「あったまいー」感はないし、クイックソートの方が高速な場合も少なくないのだが、ワーストケースがない、安定ソートである、並列処理に向いているいった利点が欠点にあまりある。「メモリーがより多く必要」という欠点も、現代では一時メモリーを使わないin-place merge sortが開発されている。クイックソートが「初恋の人」なら、こちらは「本命」といえば言い過ぎか。
メモリー効率を犠牲にしてでも(たいていのケースで)O(1)でデータにアクセスすることを可能にするこの方法は、連想配列の実装に最適で、Perlで多用されたことから今では連想配列の代名詞にすらなってしまった。
現在のLLでは、いずれも組み込みでこれをサポートしているし、CやC++のライブラリーも充実していることもあって、自ら実装する機会はあまりないと思われるが、その特性は知っておいた方がよい。
これはアルゴリズムというよりデータ構造であるが、両者には密接な関係があるのでここで紹介してもいいだろう。配列ソートにしろハッシュテーブルにしろ、データ構造は配列にデータを転がしているという点において「乱暴」であるが、こちらはデータの並べ方を工夫することによって、データへのアクセスを常にO(ln N)に抑えるという点が特徴だ。
ただし、メモリー確保(具体的にはmalloc)のコストが結構あるということで、メモリー(再)確保の回数が少ない、配列を使ったデータ処理よりも実際は低速なことが多いので、メモリーだけで用が足りる場合には意外と出番が少なかったりもする。
ところが、これがハードディスクが相手となると、とたんにこの方法の利点が生きてくる。これの変種であるB+木などは、データベースの実装などで実によく使われている。まともな計算機科学のクラスであれば、このアルゴリズムを必ず教えるのには理由があるのだ。
データの圧縮法としてもっとも基本的な方法の一つ。一応発案者の名前が付いているが、原理自体はモールス信号にも見られる。その要諦は「よく使われるものは短く、そうでないものは長く表現する」ということになる。
欠点は、コード表を作るためにデータを一度読んでからでないと理想的な圧縮が出来ないことであるが、データの特性があらかじめ解っている場合、あらかじめ用意しておいたコード表を用いることが出来る。JPEGなどがそうしており、またモールス信号もその変種と見なせる。
ここまでは割と直感的にそのよさがわかるアルゴリズムばかり紹介してきたが、「専門家はやっぱりすげー」というのも一つは紹介しておきたい。というわけで取り上げるのがこのメルセンヌ・ツイスター。
現在では乱数を使う機会というのはこれまでになく増えているが、その乱数の「乱れ具合」を革命的に改善したのがこれである。
最近では組み込みでこれに基づく疑似乱数を提供する処理系も徐々に増えて来てはいるが、まだまだ「昔」のアルゴリズムに基づくものも少なくないので、お使いの言語や環境でシリアスな乱数が必要なら、それをモジュールなどで手に入れる方法は覚えておいて損はないだろう。
誤字脱字をあげつらうのは面白いものではない。そんなことより、PCと日本語変換が小飼氏の思考に追従しきれないことに驚くべきだ。
私 のような文系人間にはあんまり縁がないのが「アルゴリズム」という奴ですが(ユークリッドの互除法も勉強してない)、それでも覚えておいたほうがいいとの ことなのでリンク。大体上5つぐらいはwikiの記事見て仕組みはわかりました。アルゴリズムとは違うけど、数学...
アルゴリズムというよりも「取り扱い手法」といった方が良いでしょうが「計算幾何学」にも、ごく軽い言及だけでもお願いします。そういう分野があるということすら知らないプログラマが多すぎるような気がしていますので。
たとえば、杉原厚吉著「計算幾何工学」の最初の方に書かれていることは、プログラマの常識にしたいことです。
その昔は、普通のフーリエ変換を計算するために、そろばん塾にいって、たすきがけの計算やってたそうです。(私の指導教官談)
紹介 - 「出口の真っ正直インタビュー」でインタビューされました死亡記事にスターを付けるはてなーの気持ちが分かんない (あけろすにっき)
強者はなぜ遠くの弱者にばかり手を差し伸べるのか?夏休みの研究には、台所が大事かも (若だんなの新宿通信)
規制するなら労働時間を将棋の棋戦を面白くするためのアイデア-その一-国手戦の創設『竜王戦を多角的に考える』 (したらば掲示板限定シリーズ三部作雑記)

 

戻る

ノーローンのサイトです。

ノーローンのサイトです。