タグ

アルゴリズムに関するigrepのブックマーク (117)

  • とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita

    というわけで、10倍の差がでた。 当然、配列の長さやソートする長さ、また実装の方法によって性能差は変わってくるが 今回の方法は有効であるということは確認できた。 既存の記事(2015/11/09 20:22 追記) コメント欄でUnordered partial sorting にそれらしきことが書いてあると教えていただいた。 そちらでは、「上位k個を取り出す(ソートは不要)」という問題を考えている。 同様に分割統治法を用いてソートしていきながら、上位k個以内の小区間になったらその区間はソートせずに全て選択して良いとしている。 早い話が、QuickSelectによりk+1番目の要素を探してそれより上位の要素をごそっと抜き出している。 分割統治法で大雑把にソートしていきながら、不要なソートを行わないようにする という同様のアプローチである。 C++のSTLの場合(2015/11/09 22:

    とても長い配列の上位M件だけをクイックソートより高速に取り出す - Qiita
    igrep
    igrep 2015/11/18
    “分割統治法でソートをしていく時に、分割された区間がそもそも上位M件にはいらなかったらその区間を無視する”
  • 遺伝的アルゴリズムで遅い正規表現を検出する - にょきにょきブログ

    ある正規表現に様々な文字列をわせてマッチするかどうか判定することは大変頻出するコードです。 稀に、わせる文字列のパターンによっては正規表現のマッチに猛烈に時間を消費する場合があります。 僕も少し前に遭遇し、下記に公開しています。 developer.cybozu.co.jp この時は、(\\w|_){1,64}@ という正規表現があって、____________________ のようにアンダースコアを複数含む文字列のマッチに大変時間がかかるという問題でした。 この、「対象文字列によってはマッチに時間がかかることがある問題」を、遺伝的アルゴリズムを用いて解決できないかチャレンジしてみましょう。 考え方としては、 ランダムな文字列を 10000 個ほど生成し、 それぞれ正規表現にマッチするか判定させ、 時間がかかった順にソートし、 上位を交配させて世代を繰り返せば、 遅い文字列が抽出でき

    遺伝的アルゴリズムで遅い正規表現を検出する - にょきにょきブログ
  • クーポンコードの打ち間違えを防ぐために工夫した話 - クックパッド開発者ブログ

    こんにちは。会員事業部ビジネス開発グループの高田です。 クックパッドは今年、株主優待制度として、プレミアムサービス一年間無料クーポンを贈呈しました。エントリではクーポンコードを打ち間違えて、意図せず他の人のクーポンコードを使用するのを防ぐために工夫した話をご紹介します。 はじめに クーポンコードは入力のしやすさを優先して数字だけの文字列にしました。はじめは rand 関数を使って生成しようとしていたのですが、数字の打ち間違えや順序間違いで、意図せず誤使用してしまうのを防ぐためにチェックサムを加えるのがいい、と同僚から助言をもらいました。 いくつか調べて見たところ、Luhn アルゴリズムが上記を満たしていたので利用することにしました。 Luhn アルゴリズムの利用 Luhn アルゴリズムとは、誤り検出のためのチェックサム符号で、1 桁の間違いや隣接する数字の順序間違いを検出できるという特徴

    クーポンコードの打ち間違えを防ぐために工夫した話 - クックパッド開発者ブログ
    igrep
    igrep 2015/06/23
    学生番号に使ってた奴も一緒なのかな
  • 年金番号の流出の話 - ビスケットのあれこれ

    プログラミングから脱線すると色々と言いたくなるという. 年金番号がウイルスにかかって流出してしまって,想定される被害は年金番号の成り済ましが怖いので,流出してしまった人たちに番号を再発行して郵送するとかニュースで言ってました. 実は,僕の学位論文の一部で,オープンシステムにおける名前付けの問題について議論しています.ちゃんと論文にもなっています.そのときの議論の延長線上に今回の年金番号流出もからんでいるので,その話をしましょう. 当時の話題の中心は,インターネットでした.世界のコンピュータにそれぞれ一意の番号をつけて(つまり,全部のコンピュータが違う番号をもっている),その上で,ある番号のコンピュータにメッセージを送りたければ,どうやってそのコンピュータを探すか(ルーティング)という問題を解けば良い,ということにしていました.その後に出てきたIPv6も色々と修正してますが同じです. ルーテ

    年金番号の流出の話 - ビスケットのあれこれ
    igrep
    igrep 2015/06/02
    どんな方法だろう。申し訳なくもちょっと想像付かない。
  • 出、出~~wwwww銀行員待行列解説奴~wwwwwww - モナドとわたしとコモナド

    銀行員待行列(Banker's deque)、二つのリストで構成奴~~wwwww 入奴と出奴~wwwwwwwww ↓入奴 三(^o^)ノ [(^o^)ノ, (^o^)ノ, (^o^)ノ] ヽ(^o^)三 [ヽ(^o^), ヽ(^o^), ヽ(^o^)] ↑出奴 追加は入奴にcons、取り出しは出奴にuncons奴~wwwリストなので基定数時間奴~wwwwww リスト枯渇防止の為、リストの長さに以下の条件課奴~~~wwwwww length (入奴) <= length (出奴) * 3 + 1 length (出奴) <= length (入奴) * 3 + 1 条件充足不能場合、|length (入奴) - length (出奴)| <= 1なるよう余剰分反転後短い側の末尾に結合して調整奴~wwwww時間計算量O(length (入奴) + length (出奴))必要~~~~wwww

    igrep
    igrep 2015/02/07
    多分これの話。 http://www.kmonos.net/pub/Presen/PFDS.pdf 参考文献も一緒。
  • ビザンチン将軍問題 - Wikipedia

    ビザンチン将軍問題(ビザンチンしょうぐんもんだい、英語: Byzantine Generals Problem)とは、相互に通信しあう何らかのオブジェクト群において、通信および個々のオブジェクトが故障または故意によって偽の情報を伝達する可能性がある場合に、全体として正しい合意を形成できるかを問う問題である[1]。フォールトトレラントシステムでの多数決の妥当性や分散コンピューティングの処理の妥当性に関わる問題と言え、二人の将軍問題を一般化したものと言える。 ビザンチン将軍問題に帰結される故障や障害をビザンチン故障(Byzantine Failure、あるいはビザンチン障害)と呼ぶ。また、ビザンチン将軍問題が発生しても全体として正しく動作するシステムをビザンチン・フォールトトレラント性(Byzantine Fault Tolerance)があるという。 問題[編集] ビザンチン将軍問題は、東ロ

  • 第5回 協調フィルタリング | gihyo.jp

    この jaccard相関係数は、ユーザAとユーザB、C、Dの類似度を表します。値が大きいほど類似しています。図4では、ユーザCがこの中では、一番類似していることをしめしています。 それでは購入していない商品2と4を推薦するかどうかはどう決定するのでしょうか。商品2のスコアはユーザAの平均評価値に各ユーザの類似度を考慮した重みつきの評価を加えることで計算します。簡易ではありますが今回は次のように実装してみました。 #! /usr/local/bin/python # -*- coding:utf-8 -*- import sys def jaccard(v1, v2): """ jacard係数を求める """ v1_and_v2 = 0. v1_or_v2 = 0. for i in xrange(len(v1)): if v1[i] == 1 or v2[i] == 1: v1_or_v

    第5回 協調フィルタリング | gihyo.jp
  • What is the difference between Θ(n) and O(n)?

    Short explanation: If an algorithm is of Θ(g(n)), it means that the running time of the algorithm as n (input size) gets larger is proportional to g(n). If an algorithm is of O(g(n)), it means that the running time of the algorithm as n gets larger is at most proportional to g(n). Normally, even when people talk about O(g(n)) they actually mean Θ(g(n)) but technically, there is a difference. More

    What is the difference between Θ(n) and O(n)?
  • MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena

    Ilya Katsov氏による「MapReduce Patterns, Algorithms, and Use Cases」の翻訳 http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/ (下書きに入れて推敲するつもりが、なんか公開されてしまっていたので、あとでいろいろ修正すると思います) February 1, 2012 この記事では、Webや科学論文で見られる異なるテクニックの体系的な視点を与えるために、数々のMapReduceパターンとアルゴリズムをまとめた。 いくつかの実用的なケーススタディも提供している。 すべての説明とコードスニペットでは、Mapper、Reducer、Combiner、Partitionaer、ソーティングにおいてHadoopの標準的なMapReduceモデルを利用します。このフレー

    MapReduceのパターン、アルゴリズム、そしてユースケース - きしだのHatena
  • English (US)

    Did someone say … cookies? X and its partners use cookies to provide you with a better, safer and faster service and to support our business. Some cookies are necessary to use our services, improve our services, and make sure they work properly. Show more about your choices.

    English (US)
    igrep
    igrep 2012/01/11
    TwitterのID発行アルゴリズムについて(in English)。続きはソースで。
  • データマイニングで使われるトップ10アルゴリズム - データサイエンティスト上がりのDX参謀・起業家

    2006年のデータマイニング学会、IEEE ICDMで選ばれた「データマイニングで使われるトップ10アルゴリズム」に沿って機械学習の手法を紹介します(この論文は@doryokujin君のポストで知りました、ありがとうございます!)。 必ずしも論文の内容には沿っておらず個人的な私見も入っていますので、詳細は原論文をご確認下さい。また、データマイニングの全体観をサーベイしたスライド資料がありますので、こちらも併せてご覧下さい。 データマイニングの基礎 View more presentations from Issei Kurahashi 1. C4.5 C4.5はCLSやID3といったアルゴリズムを改良してできたもので、決定木を使って分類器を作ります。決定木といえばCARTが良く使われますが、CARTとの違いは以下のとおりです。 CARTは2分岐しかできないがC4.5は3分岐以上もできる C

    データマイニングで使われるトップ10アルゴリズム - データサイエンティスト上がりのDX参謀・起業家
  • イントロソート - Wikipedia

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

  • Timsort - Wikipedia

    Timsort is a hybrid, stable sorting algorithm, derived from merge sort and insertion sort, designed to perform well on many kinds of real-world data. It was implemented by Tim Peters in 2002 for use in the Python programming language. The algorithm finds subsequences of the data that are already ordered (runs) and uses them to sort the remainder more efficiently. This is done by merging runs until

    Timsort - Wikipedia
  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
    igrep
    igrep 2011/09/23
    アルゴリズムの本ってこんなにあるのか・・・。奥深いぜ。
  • Rubyで安定ソートを実現する - my Linux Life

    Rubyのsortなんだが、これは安定なソートではないらしい。一般に最も高速なソートがクイックソートだからRubyもそうなんだろう。しかし公式マニュアル見ると、sort_byを使って安定なソートを記述する方法が書いてある。さて読んでみよう。i = 0 ary.sort_by {|v| [v, i += 1] }まずマニュアルでsortとsort_byの違いがぱっと見で良く分からん。よく読むと評価方法が全然違う。sort_byではブロックの評価結果を <=> メソッドで比較するのだ。ブロックの評価回数が要素数だけで済むのは内部構造のせいか?ソース読め?最近ファイルをタイムスタンプでソートするプログラムをわざわざ別の配列を作る事で実装したが、sort_byを使えば簡単だった・・・。でもこんな方法で安定ソートになるっていうのは・・・。ああ分かった。配列を比較しているんだ!なるほどねえ。マニュアル

    igrep
    igrep 2011/08/17
    i = 0 ; ary.sort_by {|v| [v, i += 1] } #Ruby で簡単に安定ソートを行う方法。
  • 凄いバカなプログラム - とっくりばー

    最近算数ばっかりですねこのブログ。だって面白いんだもの。 きしだのはてな「凄いバカなプログラムを作ろう」 こないださくらいさんと「バブルソートってたぶん再帰でできるよね」とかって話してたのですが、僕は今回、従来のソートアルゴリズムを越える画期的なアルゴリズムを考案しました。 名付けて「ショットガンソート」です。アメフトのショットガンフォーメーションをちょっとイメージしてます。 ショットガンソートのメリット 計算量がたぶんO(1)。うわどうしようなんか賞とかもらっちゃったら! 追記。計算「量」は確かに要素数に比例なのでO(n)でした。で、計算「時間」が要素数によらないからO(1)?計算量と計算時間のオーダーが違うところがバカアルゴリズム? ささいな問題点 ソートする数の大きさにより時間がかかることがある。でも時間がかかっている間はCPU資源を全く消費しないため、きっと他のプログラムを走らせら

    igrep
    igrep 2011/08/17
    数の比較をせずにできるちゅうのがすごいな。
  • 常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)

    TwitterのTLで知ったのだが、少し前に海外掲示板で"sleep sort"というソートアルゴリズムが発明され、公開されたようだ。このアルゴリズムが面白かったので紹介してみる。 Genius sorting algorithm: Sleep sort 1 Name: Anonymous : 2011-01-20 12:22 諸君!オレは天才かもしれない。このソートアルゴリズムをみてくれ。こいつをどう思う? #!/bin/bash function f() { sleep "$1" echo "$1" } while [ -n "$1" ] do f "$1" & shift done wait example usage: ./sleepsort.bash 5 3 6 3 6 3 1 4 7 2 Name: Anonymous : 2011-01-20 12:27 >>1 なん…だと

    常識を覆すソートアルゴリズム!その名も"sleep sort"! - Islands in the byte stream (legacy)