タグ

algorithmに関するmullenのブックマーク (5)

  • 第10回 麻雀の役を判定する:ITpro

    図1に示す(1)から(3)までの麻雀(マージャン)の手牌があります。「あがり牌」はすべて山からツモったものとし,リーチはかけていません。またドラやハイテイ*1なども関係ないものとします。これらの役を判定して,親の場合の点数を計算するプログラムを作ってください。 「ややこしや~ややこしや~」というのは野村萬斎ですが,思わずそううなってしまうことがプログラミングをしているとよくあります。今回の麻雀の役判定は,考えれば考えていくほどややこしく,そうしたものの代表と言えるでしょう。排他処理や優先順位が複雑にからんでいて一筋縄ではいきません。 今回はややこしい組み合わせを解決する方法を考えてみます。麻雀になじみのない方も,ちょっとしたパズル気分で試してみてください。 麻雀の役を考える 麻雀を知らない方のためにルールをおおざっぱに説明しておきましょう*2。麻雀の牌には,大きく分けて「萬子(マンズ)」「

    第10回 麻雀の役を判定する:ITpro
  • 第8回 倉庫番を解くアルゴリズム - 地球にやさしいアルゴリズム:ITpro

    「倉庫番」*1というゲームをご存じでしょうか。図1のように盤面にはいくつかの「荷物」とそれを運ぶ「人」がいます。人は1個の荷物を押して運ぶことができます。荷物を引っ張ったり,二つ並んだ荷物を同時に押して運ぶことはできません。人と荷物は縦横4方向に動けますが,壁のある位置には進めません。人を使って盤面上の荷物を動かし,すべての荷物を目的地(ゴール)に収めることができればゲーム・クリアとなります。図1の問題を解くための手順を示すアルゴリズムを作ってください。 友人たちと車でスキーに行くとき,いつも困るのは「トランクへ荷物を詰め込む順番」です。大きなスキーやかさばるスキーウエアを詰め込んでいるうえ,人によってはゲーム機やを持ってきたりするので,各自の荷物の量がまったく違うのです。狭い車のトランクには,これら荷物をうまい順番で入れていかないとなかなか全部収まりません。寒い冬の夜中にごそごそと詰

    第8回 倉庫番を解くアルゴリズム - 地球にやさしいアルゴリズム:ITpro
  • 定番アルゴリズムを徹底理解! - 今からでも遅くない!アルゴリズム入門:selfup

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

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

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

    どうなっているの?あのソフトの仕組み - 今からでも遅くない!アルゴリズム入門:selfup
  • アルゴリズムの紹介

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

  • 1