タグ

algorithmに関するakkun_choiのブックマーク (54)

  • 短縮URLっぽい文字列の生成方法3つ - 9mの日記

    短縮URLっぽいURLの文字列。http://bit.ly/wEFnVF の場合「wEFnVF」の部分をどうやって生成するかちょっと考えてみたけど、大まかに三通りしかなさそうだというメモ。1.一方向ハッシュ関数MD5とか。この方法が一番手軽な場合けっこうあると思う。ただし、文字数がやたらと多くなってしまうため短縮URLとかでは使えない。 2.適当な文字列ほとんどこれだと思う。ただし、重複チェックが必要になるので生成するたびにDBアクセスが発生するし、桁が上がる直前になると鬼のようにDBアクセスが発生するため工夫が必要。bitlyのように、あとからパスを変えられるタイプは大体これ形式なはず。 3.62進数データベースの連番のidとかを62進数に変換すれば重複なしでスマートっぽくできる。元の10進数の数字を知られたくない場合、下のコードだと@n_mapの文字達を適当にすれば簡単には分からなくな

  • Why does this code using random strings print "hello world"?

    The following print statement would print "hello world". Could anyone explain this? System.out.println(randomString(-229985452) + " " + randomString(-147909649)); And randomString() looks like this: public static String randomString(int i) { Random ran = new Random(i); StringBuilder sb = new StringBuilder(); while (true) { int k = ran.nextInt(27); if (k == 0) break; sb.append((char)('`' + k)); } r

    Why does this code using random strings print "hello world"?
  • Re:永続データ構造が分からない人のためのスライド - 簡潔なQ

    この記事はCompetitive Programming Advent Calendar 2012の12/01担当分の記事です。 永続データ構造が分からない人のために、「Re:永続データ構造が分からない人のためのスライド」というスライドを頑張って作りました。 slideshareで見る SpeakerDeckで見る ←変換に失敗したようです、見られない pptxファイル pdfファイル 内容の概要: 永続データ構造を用いる3つの問題について検討しつつ、永続データ構造について考察します。

    Re:永続データ構造が分からない人のためのスライド - 簡潔なQ
  • へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking

    この記事はCompetitive Programming Advent Calendar Div2012の2日目の記事です。 12月20日追記: Darseinさんが20日目の記事で、ビット演算についての詳しい説明を紹介してくださっています!必読ですね!!!!:) はじめに Y^´       ∨// /,∠ ,. ' /l/// /, ' , '/ ! | l }´     〈 〉    変  〈/ , ' // ̄`>< /// /// _,.=‐|'"´l l〈  変  / 〈    態.   ∨, '/l|   ,.'-‐、`//`7/  /''"´__ | ハ l丿  態   { 人)   ! !   (/!  |ヽ〈_ ・.ノ〃  〃 /  '/⌒ヾ.! ,' !く   ! !  (_ ト、__/   ヽ、_,.イ    /l l |:::::::```/:::::/...´..

    へ、変態っ!!読めないからやめてっ!bit使ったデータ構造・アルゴリズム実装集 - Negative/Positive Thinking
  • クイックソート殺し - d.y.d.

    19:39 12/09/01 クイックソート殺し こういう系統の話。 Quicksort Killer (kazoo04さん) qsortを撃墜し(最悪ケースを与え)てみた。 (qnighyさん) A Killer Adversary for Quicksort (shinhさんの解説) Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 (徳丸さんの解説) ただのクイックソートは要素数 N の配列をソートするのに最悪 N2 オーダの時間がかかってしまう、 そしてそれは pivot を偏って選びまくってしまった時に発生する、というのはよく知られた話だと思います。 といっても、広く使われている言語/ライブラリのソート関数はその辺り気をつけられていて、最悪時も O(N log N) になるアルゴリズムで実装されている…と思い込んでいたのですが(例えば C++

  • プログラミングコンテストでの乱択アルゴリズム

    1. 2012/06/12 ディー・エヌ・エー 渋谷オフィス (TopCoder Meetup in Japan) プログラミングコンテストでの 乱択アルゴリズム 東京大学情報理工学系研究科 秋葉 拓哉 / [[iwi]] 1 2. 自己紹介 • 秋葉 拓哉 / [[iwi]] – Twitter: @iwiwi • 東京大学 情報理工学系研究科 コンピュータ科学専攻 • プログラミングコンテスト凄い好き – 世界大会の常連をやっています – ここ 1 年で 3 回,来月も行きます • プログラミングコンテストチャレンジブック共著 2 3. 今日の話 「乱択アルゴリズム」 • 既存の乱択アルゴリズムの紹介を延々とはしません – そういうアルゴリズム解説は一杯あります • コンテストに焦点を絞り,乱択アルゴリズムを設計 できるようにする,ということを目指す (簡単めの話になります,中上級者の

    プログラミングコンテストでの乱択アルゴリズム
  • お釣りの小銭を減らすように支払う裏ワザ(暗算不要)

    先日、Twitter でこんな事をつぶやいたところ、思いの外、大きな反響がありました。 1866円の買い物に対して、財布をさらって2416円を出す。ちょっと怪訝な顔付きでレジ打ちをした店員さん、おつりが550円になるのを見てハッとした顔になる。してやったり感がたまらない。 11:47 AM Nov 7th これ、素早く頭を回転させて、足し算とか引き算の暗算をしていると思っている人も多いようですが、自分は 2 桁+2 桁の足し算でも繰り上がりがあると計算を間違えるほど暗算が苦手なので、決してそういう計算をしているわけではありません。 下記のような書き込みを見ると、正攻法で暗算している方が多数派なのかな?と思ったので、裏ワザというほど大袈裟じゃないかもしれませんが、自分流の計算方法を解説してみようと思います。 おつりの小銭を少なくする方法 - Yahoo!知恵袋 買い物をしてお釣りをもらうとき

    お釣りの小銭を減らすように支払う裏ワザ(暗算不要)
  • 高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development

    先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。 C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

    高速な安定ソートアルゴリズム "TimSort" の解説 - Preferred Networks Research & Development
  • Story of Your Life » Blog Archive » 兎と亀のアルゴリズムをふと考えてみた

    リストの循環チェックアルゴリズムといえば、兎と亀のアルゴリズムが有名だけど、ふと疑問がわいたのでさらっと検証してみた話。 時間も労力もかけたエントリではないけど、まぁいいかと。 兎と亀のアルゴリズムというのは、リスト構造を2つづつ辿るポインタ(兎)と、1つづつ辿るポインタ(亀)を用意して、兎が亀に追いつけば、そのリストは循環していると判断できるというアルゴリズム。 その話から最初に考えた擬似コードが下。兎が2つ進む間にちゃんと亀に追いついてるかどうかをチェックしている。 bool check(List *listp){ List *turtlep = listp; List *rabitp = listp; while(1){ turtlep = listp->next(); rabitp = listp->next(); if(rabitp == turtlep) return tru

  • 私のブックマーク : 簡潔データ構造

    田部井靖生(科学技術振興機構 ERATO湊離散構造処理系プロジェクト研究員) はじめに 近年、Web技術や計測技術の発展により言語やゲノムデータは大規模化しています。従来のデータ構造は大規模データを扱うにはサイズが大きくメモリに載らない、 しかし、圧縮するとランダムアクセスをすることができないという欠点があります。 簡潔データ構造とはデータを小さく保存かつ高速な操作が可能なデータ構造です。 近年、集合、文字列、木、グラフデータを扱うための簡潔データ構造が提案され注目を集めています。 私たちの身近なアプリケーションとして、Google日本語入力では簡潔木LOUDSの実装が使われ、実際に使われはじめています。 また、有志によるそれらを解説したサイトやライブラリなども利用可能になりつつあります。 そこで、このページでは簡潔データ構造を用いた研究開発のためのいろいろなリソースを紹介します。 解説記

  • あらゆる数独パズルを解く

    Peter Norvig / 青木靖 訳 このエッセイでは、 あらゆる数独パズルを解くという問題に取り組む。制約伝播と探索という2つのアイデアを使うと、ごく簡単に解けるということがわかる(主要なアイデアはコードにして1ページたらずで、補足的なコードが2ページある)。 数独の記法と予備概念 最初に記法をいくつか決めておこう。数独パズルは81個のマス(square)からなる盤面を使う。数独ファンの多くはカラムを1-9で、行をA-Iでラベル付けしており、カラム、行、ボックスのような9個のマスの集まりをユニット(unit)と呼び、ユニットを共有するマスをピア(peer)と呼んでいる。パズルではマスのいくつかが空いており、他は数字が入っている。パズルの目的はこうだ。 それぞれのユニットのマスが1から9の数字の順列によって埋められるようにする。 つまり、1つのユニットに同じ数字が2度現れてはならず、そ

  • JavaScriptの文字列を反転する10の方法とそのパフォーマンス - 風と宇宙とプログラム

    はじめに JavaScriptで文字列を反転する10の方法を(無理矢理?)思いついたので、ちょっと簡単に紹介したい。また、それぞれについて、各ブラウザでパフォーマンスを測定してみたので、その結果も合わせて載せる。 文字列のStringオブジェクトには、部分切り出し(substring, slice)や置換(replace)、連結(concat)など豊富な機能があるのに、反転(reverse)機能はない。Arrayのreverseはあるのに、Stringのreverseがないのはどうしてなのだろうか。 各ブラウザとそのバージョンは以下の通り: Chrome Firefox Opera Safari IE 13.0.782.112 m 6.0 11.50 5.1(7534.50) 8.0.7600.16335 rev01: C言語的発想 空の配列を作って、そこに元の文字列の後ろから1文字つづ入

    JavaScriptの文字列を反転する10の方法とそのパフォーマンス - 風と宇宙とプログラム
  • random()とrandom()*random()はどっちがランダムか? | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

    みんなのIoT/みんなのPythonの著者。二子玉近く160平米の庭付き一戸建てに嫁/息子/娘/わんこと暮らしてます。月間1000万PV/150万UUのWebサービス運営中。 免責事項 プライバシーポリシー stackoverflowで見つけた乱数に関する質問「乱数のランダムさって?」に対する解答が面白かったので紹介します。 乱数のランダムさというのは,沢山標をとったときに,標値がまんべんなく均等に分布する,ということ。プログラミング言語などに組み込まれた乱数を発生する仕組みが返す値が均等に分布してないと,テトリスでなかなか長い棒が落っこちてこなかったりするわけです。 数学的な詳細はともかく,こういう知識はプログラミングをする上で知って置いた方がよいと思います。 さて,質問の内容は random()とrandom()×random()のどっちがランダムなの? というもの。後者はrand

  • Akinator アキネータの仕組み : 研究開発

    総合研究大学院大学 複合科学研究科  情報学専攻 卒 博士(情報学) 自然言語処理や機械学習データ分析に関する研究内容とwebシステムの開発と運用について書いています。 シリコンバレーベンチャーみたいに深い技術の事業化をしたいと思っています。 ご興味ある方はご連絡ください。 あれはどうやってるのでしょうか? [iPhoneアプリ] Akinator(アキネイター)が答えを当てる仕組みを考えてみました プログラマがランプの魔人の中身を分析してみる という感じに考えた人はたくさんいますが.... これでも全然Akinatorの質には迫ってないと思います。 ○たった20〜40問の質問しかしない。 登録されてる質問の総数は、当然もっと多いのですが、そもそもAkinatorは質問を十分に選定してるのです。 この点に触れて考えている人が居ないようなのですが、おそらく、これこそがAkinatorの

    Akinator アキネータの仕組み : 研究開発
  • 常識を覆すソートアルゴリズム!その名も"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)
  • MySQLでの高速な重み付きランダム表示 - llameradaの日記

    東京都で賢い借金返済方法を教えます!では、MySQLに格納したWikipedia記事をランダムに表示している。速度を気にしないなら、 SELECT * FROM docs ORDER BY RAND() LIMIT 10; で良いのだけど、レコード数が多いと遅くて使いものにならない。そこで、記事IDを1から始まる連番になるようにDBに格納している。このようにすると、アプリケーション側でDBに格納されている文書IDが全て分かるので、ランダムに文書IDを10個選択して、その文書IDのレコードを表示することで、ランダム表示を実現している。 例えば、IDは10個選択するRubyコードは、 ids = Array.new(10){ rand(num_docs) + 1 } で、DBに発行するSQLはこんな感じになる。 SELECT * FROM docs where ID in (id1,id2,.

    MySQLでの高速な重み付きランダム表示 - llameradaの日記
  • 動的計画法を学ぶリソース・練習問題まとめ - フリーフォーム フリークアウト

    移転しました http://please-sleep.cou929.nu/20100708.html

    動的計画法を学ぶリソース・練習問題まとめ - フリーフォーム フリークアウト
  • Wayang88 - LINK VIP RESMI LOGIN JOIN AGUSTUS 2024

    akkun_choi
    akkun_choi 2010/03/13
    「手元にある全てのコインを渡せば、結果としてもっとも枚数が少なくなる」そっか、気付かなかったw
  • MS、Webブラウザ選択画面にアルゴリズム上のバグか - @IT

    2010/03/01 ヨーロッパで出荷されるWindows PCや既存Windowsユーザーに対してマイクロソフトは、IEを含む5つのWebブラウザがランダムな順序で表示されてユーザーに選択を促す「Webブラウザ選択画面」を提供するようになった。このとき表示されるブラウザの順序が、完全なランダムではなく偏りがあると話題になっている。 問題を最初に報じたのはスロバキアの技術系サイト「DSL.sk」で、Windows 7上のIE8で、問題のブラウザ選択画面を開くと、約50%の確率でIEがいちばん最後に表示されるほか、9割近い確率でChromeが1~3番目に表示されるというデータを示している。 意図的ではない、初歩的な実装ミスか この問題について、IBMのRob Weir氏は2月27日付けのブログの中で初歩的なミスによるバグの1種ではないかと論じている。 Weir氏はマイクロソフトがJavaSc

  • PHP で Google 第一回 Google の PageRank を PHP で実装 - 横転プログラミング

    Google の検索エンジンがページのランク付けのために PageRank という指標を使っているというのは聞いたことがあるかと思います。 今日はそのアルゴリズムを PHP で軽めに実装してみました。 ちなみに PHP で実装しても何もいいことがないので、やめたほうがいいでしょう。 まず PageRank というのは簡単に説明すると、 Google が考案したページのランク付けアルゴリズムでページへリンクがそのサイトの評価だという視点でランク付けを行うために作られたものです。 詳細については Google の秘密 - PageRank 徹底解説 を参考にしてみて下さい。 その内部アルゴリムですが、おおざっぱにいえば下の箇条書きにあるよう生成された確率行列の、最大固有値(確率行列はだいたいの場合において1)の固有ベクトルをべき乗法で求めることになります。 なぜ確率行列の主固有ベクトルを求める

    PHP で Google 第一回 Google の PageRank を PHP で実装 - 横転プログラミング