タグ

Algorithmとalgorithmに関するtanakaBoxのブックマーク (301)

  • The Aggregate Magic Algorithms

    There are lots of people and places that create and collect algorithms of all types (here are a few WWW sites). Unfortunately, in building systems hardware and software, we in The Aggregate often have found it necessary to do relatively obscure low-level things very efficiently. Many of the tricks we've devised or collected either require assembly language coding or are not entirely portable when

    tanakaBox
    tanakaBox 2009/08/19
    黒魔術。英語。未読
  • 一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録

    一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、

    一番右端の立っているビット位置を求める「ものすごい」コード - 当面C#と.NETな記録
    tanakaBox
    tanakaBox 2009/08/18
    M系列の周期を全て網羅しておけばいいと。案外応用範囲が広そう。1+1=0の世界は深いぜ。
  • Puzzle De Programming

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    tanakaBox
    tanakaBox 2009/08/17
    パズルの解法色々。
  • Suffix Arrayの簡単な説明

    最終更新日: 2000-11-14 (公開日: 2000-11-14) Suffix Arrayは巨大なテキストを高速に検索するためのデータ構造 です。テキストのサフィックスを辞書順 (ABC順) に並べ、それに 対するポインタを配列として格納したものが Suffix Array です。 サフィックスとはテキスト中のある位置からテキスト末尾までの文 字列のことをいいます。テキストへの検索は Suffix Array を用い て 2分探索の要領で行います。 では、 Suffix Arrayの構築に移りましょう。ここでは ``abracadabra''というテキストに対して Suffix Array を作成す ることにします。 まず最初に、テキストに対してインデックスポイントを割り当てる 必要があります。インデックスポイントは、検索が行える位置を指 定したものです。この例では、どの位置からでも

    tanakaBox
    tanakaBox 2009/08/12
    Suffix Arrayの解説。スゲーわかりやすい
  • white page

    blog めったに更新しないブログ。Suffix Arrayの構築法やデータ圧縮についてちょこっと書いてます。 memo 旧メモ。blogに全て移したので、そのうち消す予定です。 junk 過去に書いたソースコートやテスト中のものが放り込んであります。 software 自作のプログラム・ライブラリ置き場です。 links of data compression データ圧縮や接尾辞配列などに関するリンク集です。 my bookmarks お気に入りのサイト集です。

    tanakaBox
    tanakaBox 2009/08/12
    圧縮やら接尾辞配列(Suffix Array)やら。凄い。
  • イントロソート - Wikipedia

    イントロソート(英: introsort)は、David Musser(英語版) が1997年に設計した、クイックソートとヒープソートを組み合わせたソートアルゴリズムである。 最初はクイックソートを行い、再帰のレベルがソートされた要素数(の対数)を超えるとヒープソートに切り替える。時間計算量は最悪でも O(n log n) であり、同時に典型的なデータに対するソートではクイックソートに匹敵する性能を示す。 イントロソートは、クイックソートやヒープソートと同様、比較ソートである。 クイックソートは、性能がピボット(データ列を分割する境界値)の選択に強く依存するという欠点があった。 例えばデータ列の先頭や最後尾をピボットに選ぶと、ほぼソートされた入力について最悪の性能を示す。 ニクラウス・ヴィルトはこれを避けるため、データ列の中央の要素をピボットに選ぶようにしたが、工夫をこらした並びに対しては

    tanakaBox
    tanakaBox 2009/08/11
     最初はクイックソートを行い、再帰のレベルがソートされた要素数(の対数)を超えるとヒープソートに切り替える。
  • atso-net.jp

    This domain may be for sale!

    tanakaBox
    tanakaBox 2009/08/11
    最近の乱数生成アルゴリズム。
  • http://www.pref.fukushima.jp/pc-concours/2009/03/03_reidai.html

    tanakaBox
    tanakaBox 2009/07/27
    パソコン甲子園の過去問
  • Visual C++の勉強部屋

    理工系、特に電気系、の学生と技術者を対象としたVisual C++の解説を行います。Visual C++を始めたいが、よく分からないという人は、これを参考にしてください。ただし、初めてプログラムを学ぶ全くの初心者向けではありません。 資料の一部のJava版が(株)翔泳社のウエブサイトCodeZineにありますので、こちらもご利用ください(Java版とある場所をクリックして下さい)。Visual C++ 6.0版(現在は全部削除)が最初に公開され、そのJava版がCodeZineに寄稿され、その後に現在のVisual C++ 2005 Express Edition版が作成されています。 Java版は、すべてアプレットになっていますので、ブラウザから試してみることができます(Javaランタイム必要)。 Visual C++ 2008 Express Editionが無償でダウンロード

    tanakaBox
    tanakaBox 2008/05/14
    画像処理関連。
  •  ̄torito_ パズル遊びへの招待・オンライン版

    ●パズル遊びへの招待・オンライン版● このコーナーでは、高木茂男氏の著書「パズル遊びへの招待」(発行:PHP研究所・1994年)の内容に著者自身が加筆・修正を加えたものを、著者人及び出版元の許諾により掲載しています。 一部情報が古くなったり、また現代では不適切と思われる表現もございますが、資料的価値を尊重し執筆当時のままとしております。 他サイトへの無断転載はご遠慮ください。

    tanakaBox
    tanakaBox 2008/04/27
    アルゴリズムネタに。
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    tanakaBox
    tanakaBox 2008/04/22
    M系列についての解説あり。
  • Mersenne Twister: A random number generator (since 1997/10)

    English Version News: MTToolBox をGitHubで公開しました。(2013/10/04) TinyMTをリリースしました。 (2011/06/20) MTGPをリリースしました。(2009/11/17) SIMD-oriented Fast Mersenne Twister (SFMT) をリリースしました。 SFMTはオリジナルのMersenne Twisterより約二倍速く、 よりよい均等分布特性を持ち、零超過初期状態からの回復も高速です。 SFMTのページを見てください。 (2007/1/31) お願い:使う時にemailを一通下されば、 今後の改良のはげみになります。 どんなささいな問題点でも、見つけ次第御連絡下さい。 m-mat @ math.sci.hiroshima-u.ac.jp (このメールアドレスは スペースを抜いて手で打ち直してください)

    tanakaBox
    tanakaBox 2008/04/22
    メルセンヌ・ツイスタ。素数バンザイ。
  • アルゴリズムの紹介

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

    tanakaBox
    tanakaBox 2008/04/18
    高速化手法について。参考になる点が多い。
  • Sphere Online Judge (SPOJ)

    Become a true programming master Learn how to code and build efficient algorithms Are you passionate about coding? Try your luck in a brain challenge and join ADB Brain Wars contest! ADB Brain Wars is a contest organized for Polish programmers. Check the details at: adb-brain-wars.com Win great prizes and have a lot of fun! The elimination round begins on the 25th of March Register today! Seven da

    Sphere Online Judge (SPOJ)
    tanakaBox
    tanakaBox 2008/04/12
    ネトゲ。
  • 『数学者の密室』

    3種類以下の数字からなる2乗数 [F24] ('97/04/28, '00/10/03, '03/07/13, '04/05/17, '08/10/31 更新)

    tanakaBox
    tanakaBox 2008/04/08
    素因数分解とか未解決問題とか。
  • 最短経路問題

    (1) 区間ABを通り抜ける経路は何通りあるか。 (2) 区間ABを通り抜けずに区間CDを通り抜ける経路は何通りあるか。 (3) すべての経路から任意に1つ選んだとき、S地点からG地点に到達するのにかかる時間 の期待値を求めよ。 (解) (1) (2!/1!1!)×(5!/2!3!)=2×10=20(通り) (2) 1×1×1+2×1×1+1×(4!/2!2!)×1=1+2+6=9(通り) (3) 区間AB、区間CDをともに通り抜ける場合(所要時間 16-1+6=21分) 2×3=6(通り) 区間ABを通り抜けるが、区間CDは通り抜けない場合(所要時間 16-1=15分) 2×(1×3+2×2)=14(通り) 区間CDを通り抜けるが、区間ABは通り抜けない場合(所要時間 16+6=22分) 上記の(1)の場合で、9通り 区間AB、区間CDをともに通り抜けない場合(所要時間 16分) 8!/

    tanakaBox
    tanakaBox 2008/02/28
    パスカルの三角形みたいにやればいい。
  • 多倍長演算クラス - sodex @ ウィキ

    bigint.h #ifndef _BIGINT_INCLUDE_CHECK #define _BIGINT_INCLUDE_CHECK #include <algorithm> #include <vector> #include <list> #include <iterator> #include <iostream> #include <iomanip> using namespace std; typedef unsigned long int LINT; template <typename L> class BIGINT { list<L> lint; int degree; // The num of this list bool sign; // if this BIGINT is greater than 0, sign is true. public: BIGINT<

    多倍長演算クラス - sodex @ ウィキ
    tanakaBox
    tanakaBox 2008/01/30
    sodexさんの多倍長演算クラス。参考になります。
  • アルゴリズムとデータ構造演習

    演習の目的は、プログラミング言語C及びSchemeの基礎を習得し、 それらの言語を通じて、講義「アルゴリズムとデータ構造」の理解を深めることにあります。 重要なお知らせ 特に重要な連絡事項はここに掲載されます。 課題について 課題には、A課題とB課題があります。(課題番号の末尾が種類を表します。) B課題が基礎的な課題で、A課題が発展的な課題となっています。 B課題を全問解くことが、単位取得の目安です。 C入門第1回(10月10日) C入門第2回(10月17日) C入門第3回(10月24日) C入門第4回(10月31日) C第1回(11月7日) C第2回(11月14日) C第3回(11月21日) C第4回(11月28日) C第5回(12月5日) Scheme第1回(12月12日) Scheme第2回(12月19日) Scheme第3回(1月9日) Scheme第4回(1月16日) C補講

    tanakaBox
    tanakaBox 2008/01/28
    東大の演習。定番な問題が多くてステキ。リンク切れ。
  • いろいろな曲線

    グラフ描画についての指針 グラフを調べる場合、次のことを念頭において計算を進めればよい。 (1) 曲線の存在範囲(Existence)や座標軸に対する対称性(Symmetry) (2) 座標軸との交点(Intersection)や曲線上の特殊な点の座標(Special point) (3) 関数の増減と極値(One) (4) 関数の凹凸と変曲点(Two) (5) 漸近線(Straight line) 私の高校時代、上記手順を覚えるために頭文字をつなぎ合わせて、 SESIOTS(セシオッツ) などという語呂合わせを考案したものだ。 例 曲線 Y2=X2(1-X2) のグラフを描いてみよう。 式の特徴から、曲線は、X軸に関して対称、Y軸に関して対称、原点に関して対称である ので、計算する範囲を、X≧0、Y≧0 としてよい。さらに、Y2≧0 であるので、 0≦X≦1 としてよい。このとき、与えら

    tanakaBox
    tanakaBox 2008/01/28
    曲線色々。たのしげ。
  • SAT ソルバで数独を解く方法 - まめめも

    数独は非常に SAT に変換しやすい問題です。全部参考文献 *1 に載っている内容ですが、なるべくわかりやすく説明してみます。ちょっと長いです。 SAT とは まず SAT をごく簡単に説明します。すでに SAT を知っている人はここは読み飛ばしてください。 命題論理式の形の一つに乗法標準形のというのがあります。変数か変数の否定 (リテラルと言います) を or だけでつないだ式 (節と言います) を and だけでつないだ論理式のことを言います。つまり以下みたいな形です。 ( a1 or !a2 or ... or an) and ( b1 or !b2 or ... or !bn) and ... and (!z1 or z2 or ... or !zn)SAT は「a1 や zn などの変数にうまく true か false を代入して、上の式全体を true にできるか」という問題

    SAT ソルバで数独を解く方法 - まめめも
    tanakaBox
    tanakaBox 2008/01/23
    未読。エイトクイーンとおんなじような感じ?