タグ

algorithmとAlgorithmに関するrydotのブックマーク (312)

  • Natural Order String Comparison

    by Martin Pool This project has moved to github.com/sourcefrog/natsort. Computer string sorting algorithms generally don't order strings containing numbers in the same way that a human would do. Consider: rfc1.txt rfc2086.txt rfc822.txt It would be more friendly if the program listed the files as rfc1.txt rfc822.txt rfc2086.txt Filenames sort properly if people insert leading zeros, but they don't

  • コンピューター業界の「辞書順」に疑問

    なるほど、確かに... と流しかけて、ちょっと待てよと思った。 英語の場合なら、単語を辞書順に並べるというのは直観点で分かり易い。英々辞典 (例えば OED) に収録されている通りに単語を並び換えればいい。英語では、辞書順はアルファベット順とも言い換えられるし、大文字小文字を無視した ASCII 順と言っても的外れじゃあない。 でも日語の場合、どうだらう。 日語で辞書と言えば、国語辞書、漢和辞書、和英辞書、類語辞書が思いつく。 辞書によって単語の収録順が大きく異なる類語辞書や、見出し語をローマ字並びで並べていた旧い和英辞書は、コンピューター科学の人間が想定している「辞書」ではない。 やはり、国語辞書の並びを「辞書順」と呼んでいるのか。では、日で有名な広辞苑を引いてみやう。 広辞苑では、見出し語が読みの順番で並んでいる。注意したいのは、アルファベットの見出し。例えば、「ABC」という見

  • Natural Sorting in C#

  • Hopefully the World Hardest Sudoku Puzzle Created by Super Computers

  • Difficult Sudoku Puzzles Created by Replica Exchange Monte Carlo Method

    An algorithm to create difficult Sudoku puzzles is proposed. An Ising spin-glass like Hamiltonian describing difficulty of puzzles is defined, and difficult puzzles are created by minimizing the energy of the Hamiltonian. We adopt the replica exchange Monte Carlo method with simultaneous temperature adjustments to search lower energy states efficiently, and we succeed in creating a puzzle which is

  • Algorithm - 配列の冪集合、順列、組み合わせを再帰なしで作る : 404 Blog Not Found

    2013年03月08日11:00 カテゴリアルゴリズム百選Math Algorithm - 配列の冪集合、順列、組み合わせを再帰なしで作る C言語による最新アルゴリズム事典 奥村晴彦 ちょっと必要に迫られたので、JavaScript用のやつを作りました。 dankogai/js-combinatorics ・ GitHub こんな感じで使います。 var a = ['js', 'pl', 'py', 'rb'], c, e; p( '/* power set */' ); c = Combinatorics.power(a); p( 0 + c ); while (e = c.next()) p(JSON.stringify(e)); p( '/* combination */' ); c = Combinatorics.combination(a, 3); p( 0 + c ); p(J

    Algorithm - 配列の冪集合、順列、組み合わせを再帰なしで作る : 404 Blog Not Found
  • 中学生にもわかるウェーブレット行列 - アスペ日記

    id:echizen_tm さんの記事「ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix"」から始まったウェーブレット行列ブームから半年以上が過ぎ、すでに枯れた技術として確立されつつある感があります。 …嘘です。 日以外ではあんまり来ていません。 理由としては、やはりアルファベット圏では単語境界が明確であるため、こちらの記事で書かれているような「キーワード分割の難易度」といったことがあまり問題にならないということがあるかもしれません。 まあ、そういうわけで局所的に来ているウェーブレット行列ですが、日語をはじめとする単語境界のない言語圏にとっては重要なネタであると思うため、解説記事を書き直して*1みようと思います。 ウェーブレット行列でできること 主となる操作は、文字列に対する 定数時間の rank() と select()*2 です。 rank() は、「文

    中学生にもわかるウェーブレット行列 - アスペ日記
  • constexpr アルゴリズムの実装イディオム その1 - ボレロ村上 - ENiyGmaA Code

    中3女子です。 今回は、constexpr におけるアルゴリズムの実装法について考える。 よく知られているように、constexpr 関数には言語規格上の制約が多くある。 ローカル変数が使えない、if や for などの制御構文が使えないなどは、C++11 に触れた者なら誰でも知っているだろう。 だが、それらは条件演算子や再帰によって、単純に代替できる問題である。 つまり、非 constexpr な実装に対して、処理の流れを質的に変えることなく constexpr に書き換えることができる。 単純に書き換えられる例: template<typename T> T const& runtime_min(T const& a, T const& b) { if (b < a) return b; return a; } template<typename T> constexpr T con

    constexpr アルゴリズムの実装イディオム その1 - ボレロ村上 - ENiyGmaA Code
  • NTL: A Library for doing Number Theory

    NTL is a high-performance, portable C++ library providing data structures and algorithms for manipulating signed, arbitrary length integers, and for vectors, matrices, and polynomials over the integers and over finite fields. By default, NTL is thread safe. NTL is distributed under LGPLv2.1+ (i.e., LGPL version 2.1 or later) [more details] If you are interested in contributing to the development o

  • AKS素数判定法 - Wikipedia

    AKS素数判定法(AKSそすうはんていほう)は、与えられた自然数が素数であるかどうかを決定的多項式時間で判定できる、世界初のアルゴリズムである。ここで、素数判定法が多項式時間であるとは、与えられた自然数 が素数であるかどうかを判定するのにかかる時間が の多項式を上界とすることをいう。 の多項式ではないことに注意する必要がある。 AKS素数判定法は2002年8月6日に "PRIMES is in P" と題された論文で発表された。Agrawal-Kayal-Saxena 素数判定法としても知られ、論文の著者であるインド工科大学のマニンドラ・アグラワル教授と、2人の学生ニラジュ・カヤル、ナイティン・サクセナ(英語版)の3人の名前から付けられた。 この素数判定法が発見される以前にも、素数の判定方法は多数知られていたが、リーマン予想などの仮説を用いずに、決定的多項式時間で判定できるアルゴリズムは存

  • Things that amuse me

    Quicksort in Haskell Quicksort is a commonly used example of how succinct Haskell programming can be. It usually looks something likes this: qsort :: (Ord a Bool) => [a] -> [a] qsort [] = [] qsort (x:xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs) The problem with this function is that it's not really Quicksort. Viewed through sufficently blurry glasses (or high abstraction altitu

  • Haskellでメモ化する(中級)

    前回のpostで、Haskellでメモ化する方法について書きました。そのとき、疑問点として、「なんで、メモ化と不動点が繋がってるねん!なんでやねん!」というのがありました。その疑問が解決したので中級編を書きます。 どうやら不動点コンビネータを利用してやりたいことは、「任意の関数が与えられたときに、その計算をメモ化する関数を作成する」ということのようです。この発想にはびっくりです。どれだけ抽象度の高いことをやるんだよ。という感じです。imparative、あんど、object-orientedな思想に育てられた(毒された?)普通のプログラマーである私には思いもよらない発想でした。。

  • Haskellでメモ化する(初級)

    1つは、参照透明性による壁。Haskellには副作用がないため、再代入ができない。つまり、メモ化する対象を更新していくというような作業ができないのです。外部変数を用意して、その外部変数に計算した値を格納していくという方法は通じないのです。。

  • イントロソート - Wikipedia

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

  • http://cl-www.msi.co.jp/reports/svm.pdf

  • 古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)

    最近、ゲーム界隈ではプロシージャルテクスチャー生成だとか、プロシージャルマップ生成だとか、手続き的にゲーム上で必要なデータを生成してしまおうというのが流行りであるが、その起源はどこにあるのだろうか。 メガデモでは初期のころから少ないデータでなるべくど派手な演出をするためにプロシージャルな生成は活用されてきたが、ゲームの世界でプロシージャル生成が初めて導入されたのは、もしかするとドルアーガの塔(1984年/ナムコ)の迷路の自動生成かも知れない。 なぜ私が迷路のことを突然思い出したのかと言うと、最近、Twitterで「30年前、父が7年と数ヶ月の歳月をかけて描いたA1サイズの迷路を、誰かゴールさせませんか。」というツイートが話題になっていたからである。 この迷路を見て「ああ、俺様も迷路のことを書かねば!俺様しか知らない(?)自動迷路生成のことを後世に書き残さねば!」と誰も求めちゃいない使命感が

    古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)
  • BLOG::broomie.net: 機械学習の勉強を始めるには

    thriftとかhadoopなど,何やらいろいろと手を出してしまい,ここのところブログの更新が滞ってしまっていますが,今日は前から書きたかったトピックについて自分へのメモの意味も含めて記しておきたいと思います. はじめに 最近,といっても結構前からなのですが,海外のブログなどで「機械学習の勉強を始めるガイドライン」についてのエントリーがいくつか見られ,かつ,議論も少し盛り上がっています.僕は機械学習が好きなだけで,専門というにはほど遠いのですが,僕も一利用者としてはこのトピックに関してはとても興味があります. 機械学習というと,色々な数学的な知識が必要であったり,統計学や人工知能の知識も必要になったりしまったりと,専門的に学ぶ機会が無かった人にとっては興味が湧いてもなかなか始めるには尻込みしてしまうことかと思います.今日紹介するエントリーは,そんな方々にヒントになるような内容になっていると

  • Egisonの価値

    Egisonの価値 パターンマッチについて考えることは,思っているより非常に重要なことである. 新しい強力なパターンマッチの表現をみつけることは,関数型言語や論理型言語, オブジェクト指向言語などのアイデアと較べるとそこまで重要なことではないという認識があるような気がする. しかし,そんな認識は間違っていて, 新しく開発された超強力なパターンマッチ機能をもつEgisonが, 実はどれだけ影響力を秘めた言語であるかということを今回は書いてみようと思う. プログラミング言語には大雑把に分けて, 計算機を制御するための道具としての捉え方と, アルゴリズムを表現するための道具としての捉え方があるように思う. 前者の捉え方は,入出力やメモリ管理,並列計算,ネットワーク関連の処理などの コンピュータの機能を組み合わせて, 役に立つ便利なアプリケーションを作るハッカー的な捉え方である. 後者の捉え方は,

  • 定期的に繰り返し実行する簡単ではないお仕事 - やねうらおブログ(移転しました)

    いやー、この問題は当に難しい。難しすぎて、どうやって解決すればいいかいまだによくわからない。わからないので、ここに書いてみる。 最初、とあるお客さんのために「ひよこの餌やりプログラム(仮)」を作っていたんだ。開始ボタンを押すとひよこの餌が出てくる。たったそれだけのプログラム。 今回は、これを「定期的に実行する機能が欲しい」と言われた。 この要望を実現するのがすこぶる難しかったんだ。 「やねうらおってそんなプログラムすら書けないの?老害なの?」 とか言わないで欲しい。この問題、当に難しいんだよ! ■ 1度目のひよこの全滅 まず、この要望に沿って、私の会社のプログラマが当初、次のようなダイアログをつけたわけだ。 繰り返し実行のところにチェックを入れた場合、ここで指定された時間後にも繰り返し実行する。単位は分で指定する。1日ならば60×24 = 1440を指定する。そうすると、ひよこの餌やり

    定期的に繰り返し実行する簡単ではないお仕事 - やねうらおブログ(移転しました)
  • 高速フーリエ変換より高速なフーリエ変換アルゴリズム | スラド サイエンス

    DFT(短時間フーリエ変換)した結果がkスパースな (=ほとんど0ばっかりで、0以外のデータが最大でもk個しかない) ような、信号に対して行える高速アルゴリズムの話しのようです。 計算オーダー ・DFT O(n^2) ・FFT O(n log n) ・NOSFT ①O(k log n)      ※理想 ②O(k log n log(n/k))  ※一般的な入力 ただしk≦n, フーリエ変換結果がkスパースな場合。 理想的には、kスパースなデータであれば①なんでしょうけど、 わりあいkスパースなデータであれば②程度。外れていれば誤差が増える。 10倍早いという感じは受けなかったのですが、 イメージ的には全データ1024個だったら、フーリエ変換した後の結果が 0以外のデータ102以下、ほとんど0データが残992個であれば、 ②の演算が採用でき、k=102, n=1024としてFFTに比べ10