タグ

programmingとalgorithmに関するn246のブックマーク (11)

  • スペル修正プログラムはどう書くか

    Peter Norvig / 青木靖 訳 先週、2人の友人(ディーンとビル)がそれぞれ別個にGoogleが極めて早く正確にスペル修正できるのには驚くばかりだと私に言った。たとえば speling のような語でGoogleを検索すると、0.1秒くらいで答えが返ってきて、もしかして: spelling じゃないかと言ってくる(YahooMicrosoftのものにも同様の機能がある)。ディーンとビルが高い実績を持ったエンジニアであり数学者であることを思えば、スペル修正のような統計的言語処理についてもっと知っていて良さそうなものなのにと私は驚いた。しかし彼らは知らなかった。よく考えてみれば、 別に彼らが知っているべき理由はないのだった。 間違っていたのは彼らの知識ではなく、私の仮定の方だ。 このことについてちゃんとした説明を書いておけば、彼らばかりでなく多くの人に有益かもしれない。Google

  • 今からでも遅くない!アルゴリズム入門---目次

    高速なハードウエア,至れり尽くせりのユーザー支援機能を備えた開発ツール,高機能なクラスライブラリやフレームワークなどなど,近ごろのプログラムを書くためのお膳立ては,とても充実しています。しかし,どんなに環境が整っても,ソフトウエアを作るには何らかのアルゴリズムに従って問題を解きほぐし,プログラムにするという作業が相変わらず必要です。 そこで特集では,まずPart1で身近な例からアルゴリズムというものに迫ってみます。皆さんが普段接している便利なソフトやサービスがどのような仕組みで動いているのか,その仕組みをのぞいてみましょう。教科書で勉強するようなアルゴリズムの話とはちょっと違うものも出てきます。中には,サービスの重要な要素をプログラムで処理せず,手作業に頼って実現しているものもあります。実用ソフトの世界で当に使いやすいものを作るには,アルゴリズムだけわかっていてもダメなことが少なくない

    今からでも遅くない!アルゴリズム入門---目次
  • 定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup

    このパートでは,プログラミングを勉強するうえで欠かせないアルゴリズムの中でも定番中の定番を紹介します。ソート(並べ替え)やサーチ(検索)などの機能は今では標準のライブラリとして提供されています。実用的なプログラムを作るときにそのものずばりをいちいち書く機会は少ないかもしれません。しかし定番のアルゴリズムは,様々に形を変えて普段のプログラミングに登場します。 解説を読んで仕組みがわかったら,ぜひそれをプログラムにしてみてください。読んだだけではプログラムを書けるようにはなりませんし,プログラムを書いてみて初めて,実は十分に理解できていなかったと気付くことがよくあります。しかもアルゴリズムは特定のプログラミング言語に依存しないので,一度身に付ければ,後でどんな言語を学ぶ場合でも役に立ちます。 1番目から6番目まではソートのアルゴリズム,7番目から9番目まではサーチのアルゴリズムです。一つひとつ

    定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup
    n246
    n246 2006/11/02
    勉強します
  • どうなっているの?あのソフトの仕組み - 今からでも遅くない!アルゴリズム入門:selfup

    Webの全体像を効率よく取り込み,分類する 「YSTのシステムは大まかに三つの機能に分かれます(図2)。最初は世界中のWebページをYSTのシステムに取り込む『クローリング(crawling)』という機能です」(Yahoo! JAPAN,リスティング事業部 検索企画室の宮崎光世氏,以下同)。 取り込むと簡単に言っても,Webページの数は膨大なうえ,更新の頻度や情報の質などがまちまちです。すべてのページに同じようにアクセスしていると非効率なことこの上ありません。そこで,限られた時間で質の良い検索ができるようにするための工夫をしています。例えば,クローリングを繰り返すうちに頻繁に更新されることがわかったページは短いサイクルでチェックし,ほとんど更新のないページはチェックの頻度を落とす,といったことをしているそうです。 ただ,更新の頻度が単に高いだけではダメです。重要性が高いと考えられるWebサ

    どうなっているの?あのソフトの仕組み - 今からでも遅くない!アルゴリズム入門:selfup
  • プログラムを2倍から4倍早くする方法 - GIGAZINE

    プログラミングの話なので、ソフトウェアを使うだけのユーザーには関係ない話です。 要するに実行速度の遅いプログラムを2倍から4倍高速化させるには非常に基的なトリックというか技術を使えば可能ですよ、というお話。 アルゴリズムの考え方なので、仕事上どうしてもプログラムの実行速度を上昇させる必要があるが、やり方がイマイチよく分からないという人は必見。 Dr. Dobb's | An Algorithm for Compressing Space and Time | 3 1, 2006 かの有名な「ライフゲーム」を例に出し、プログラミングのコードの内容を高速化するにはどういうアプローチを取ればいいのか、その際に使用する再帰的アルゴリズムの考え方、複雑な式を簡単な式に圧縮する方法、圧縮することで実行時間の節約が可能になること、などをやたら詳細に解説しています。 ぶっちゃけ、これが理解できるのであれ

    プログラムを2倍から4倍早くする方法 - GIGAZINE
  • algorithm

    奥村晴彦さんの「C言語による最新アルゴリズム事典」技術評論社、1991年、の C 言語プログラムの Ruby への翻訳に挑戦します。プログラムの説明は同書を読んでください。変換はできるだけ逐語的に行っています。プログラムの動作は原作の C プログラムのそれと比較してチェックしていますが、うまく動作しないときは C から Ruby への変換のさいに起きたものです。バグレポートは tnomura@mnet.ne.jp までお願いします。 この Ruby 翻訳版はできるだけレイアウトも含めて原作の C プログラムを変更しないようにしたため、必ずしもRuby らしいコーディングスタイルとは言えないかもしれませんが、プログラムがきちんと動作することを優先しました。C から Ruby への翻訳の著作権に関しては Ruby のライセンスに準じます。配布、改変は自由です。ただし、プログラム体には原作者の

  • データマイニングを利用したプログラムの改善

  • イケてないプログラム(使えない成果物)に見られる3つの共通点

    クイックソートの話で書いたとおり、相変わらず Excel - VBA と格闘する日々が続いております・・・orz 「大企業にありがちな問題。委託開発の甘い罠・・・」でも書いたとおり、今まで外注して作ったソフトウェアってほぼ 100% の確率でイケていないものが完成してます。年末に納品されたソフトウェアのできも酷いの何のって・・・ さて、いままで見てきたイケてないプログラムのダメソースに共通して言えることが3点ありまして、 DRY ( Don’t Repeat Yourself ) でない。同じもしくは似たソースのコピペが至る所に散在する。 ロジックに無駄が多すぎ。行き当たりばったりで作った感、満点。 アルゴリズム知らなさすぎ。馬鹿ループ処理で時間かかりすぎ。 のいずれか、もしくは全部が当てはまります。大抵は全部ですね。こういったソースが納品されると、センス無いなぁ〜と思っちゃうわけ。こうい

  • 計算的な深さと脳

    ニューロンが入力を受けてからスパイクを出すまでは早くとも数ミリ秒かかる。人間が反応するまでの時間は零点何秒かだから、入力と出力の間には最大に見積もっても数十段のニューロンが介在するだけである。(実際はもっと段数が低いだろう。) 一方コンピュータの方は現在のネズミ以下の判別能力しかないような画像認識をするにあたってさえ数千万サイクルの計算を行わなくてはならない。 だから、脳が物凄い並列計算をやっているに違い無い。ここまでは普通の話ね。 で、問題は「じゃ、物凄い並列な機械をつくったら脳の能力を再現できるのかよ」ということ。もちろん誰も答えをしらない。どんなアルゴリズムを使えば良いか分からないし。 人によっては絶望して「新しい物理法則を」とか「量子論的並列性」とか、「魂」とかに行っちゃう。 で、僕も答えは持って無いけど、この問題を考えるにあたって以下の「計算的大きさ」と「計算的深さ」の概念を

  • アルゴリズムの紹介

    ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 こんなことやって意味あるのかどうか正直言って迷いました。プログラマはたいてい知っているような内容だし見る人もいないんじゃないかと思いましたが、これからプログラミングを始めてみようという方にとっては参考になるかもしれないし、何よりも自分にとって頭の中を整理できたりするので、これから定期的にやっていこうかと考えてます。 ところで、紹介する内容はほとんど過去に出版された書物関係から抜粋しています。一応下の方に参考文献として挙げておきますので興味を持たれた方は書店などで探してみてはいかがでしょうか? ということで、まずはライン・ルーチン(画面に直線を描画する)についての紹介です。

  • <h2>C言語によるアルゴリズム(コメント付き)</h2>

  • 1