Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 今朝起きたら、とんでもない論文を見つけました。 Othello is Solvedゲームの オセロが"解かれた(弱解決)" というのです。飛び起きました。それで、16時まで二度寝してから読みました。 注意すべきは、この論文が査読を経て公開されているわけではないこと、つまり形式上特にチェックを受けたものではないことです。ただ、タイトルからして非常に衝撃的ですので、個人的に読んでみました。この記事では、私がこの論文(およびソースコード)を読んでわかったことを、なるべくわかりやすくまとめます。随時更新します。 余談ですが、このタイトルはどう

はじめに本書は,筆者が長年書き溜めた様々な実務的な最適化問題についてまとめたものである.本書は,Jupyter Laboで記述されたものを自動的に変換したものであり,以下のサポートページで公開している. コードも一部公開しているが,ソースコードを保管したGithub 自体はプライベートである.本を購入した人は,サポートページで公開していないプログラムを 圧縮ファイル でダウンロードすることができる. ダウンロードしたファイルの解凍パスワードは<本に記述>である. 作者のページ My HP本書のサポートページ Support Page 出版社のページPythonによる実務で役立つ最適化問題100+ (1) ―グラフ理論と組合せ最適化への招待―Pythonによる実務で役立つ最適化問題100+ (2) ―割当・施設配置・在庫最適化・巡回セールスマン―Pythonによる実務で役立つ
暗号通貨でもよく取り上げられる、ゼロ知識証明について、以下の記事が分かりやすかったので、みなさんにも紹介したいと思います。 数式は一切登場しません。イメージで理解でます。 引用元 ゼロ知識証明って?? ゼロ知識証明とは、ある人(証明者)が別のある人(承認者)に対して、与えられた情報が「真実である」ということ以外の情報を相手に与えずに、その情報が実際に「真実」であることを証明する手法のことです。 暗号学で使われている、証明プロトコルの一種なんですが、これだとまだ理解できないですね。 証明とは、ある主張が正しいこと納得させる手段です。そして、証明プロトコルとは主張を納得させたい証明者と、証明の正しさを確かめる検証者が存在し、最終的に検証者を納得させる暗号プロトコルです。※プロトコル:処理手順 具体的に、どういう時に使うのでしょうか? ・Webサービスにログインする時:パワードを入力する代わりに

ここまで、LOUDS のビット列を使って木構造をたどる方法を見てきました。 今回は、LOUDS のデータを使って trie を実現する方法を考えます。 (trie を知らない方は、情報系修士にもわかるダブル配列をご参照ください) まず、辞書には次の単語が入っているとします。 an i of one our out すると、trie は、これまで例として使ってきた木と同じ形になります。違いは、それぞれのエッジにラベルがついていることだけです。 エッジごとのラベルは、どのような形で覚えておくのがいいでしょうか。ここでは、それぞれのエッジの下にあるノード番号と関連付けて覚えておくことにします。すると、次のようになります。 例えば、2番ノードに入ってくるエッジについているラベルは "a" なので、ノードが "2" のところのラベルは "a" になります。ここでは 仮想的な 0番ノードは使わないため

ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフーTechBlog はじめに 検索技術の菅原です。 以前にこのTechBlogで紹介されたNGT(Neighborhood Graph and Tree)という高速な近傍探索を実現するソフトウエアのpython用インターフェースが公開されました。pythonは機械学習のライブラリが多く公開されており、より手軽にNGTを組み合わせて使うことができるでしょう。 そこで今回はword2vecのベクトルを近傍探索する実践的な内容を紹介します。word2vecを扱うライブラリとしてgensimを使用します。word2vecやgensimの詳しい説明は省略しますが、分からなくてもpythonの文法を知っていれば理解できると思います。今回使用した環境はMacBo

こんにちは!サーチチームの @metal_unk です。普段はサーバーサイドエンジニアとして、メルカリの検索を改善する仕事をしています。 メルカリには Be Professional Day という「普段できないことをやろう」をテーマとする日があり、その日は業務に直接関係のないことや、普段は手をつけられないリファクタリングなどがされます。Be Professional Day の様子はこちらで紹介されています。tech.mercari.com わたしは今回の Be Professional Day で、Knuth multiplicative hash が最小完全ハッシュであることを証明しました。このブログはその証明についての記事です。 「普段できないことをやろう」という Be Professional Day では、証明もアリです。 Knuth multiplicative hash

Wikipediaを漁っていたところScalableBloom Filters(SBF)というデータ構造を発見してしまったので紹介します1。 参照した論文 http://haslab.uminho.pt/cbm/publications/scalable-bloom-filtersBloom Filter SBFの説明に入る前に、Bloom Filterについて簡単に紹介します。もっとも、日本語のWikipediaでも十分詳しい説明が載っていたりするのですが……。 ささっと説明Bloom Filterはちょっと不思議な性質を持つデータ構造の一種です2。 いわゆるSetと同じ操作を提供する 要素を入れる操作と、ある要素が入っているかを調べる操作 どちらも時間計算量O(1)で実現できる ハッシュテーブルなどを用いて実装される同種のデータ型と比して、とても空間効率が良い その代わりに、ある

結局、やり出したら止まりません。私は以前、” I Wrote a Fast Hashtable(私が書いた高速なハッシュテーブル) “という記事と、それに次いで” I Wrote a Faster Hashtable(私が書いたより高速なハッシュテーブル) “という記事をブログにアップしましたが、今回ついに、最速のハッシュテーブルを書き上げました。これが意味するところは、ルックアップがどのハッシュテーブルよりも速いということです。それに加えて、挿入や削除も(最速とまではいかないまでも)非常に速く行えます。 秘訣は、探索回数の上限を設定したロビンフッドハッシュ法を使用することです。ある要素が、その理想的な位置からX数以上、離れた位置にある場合、テーブルを拡張することで、全ての要素が、その大きなテーブル内において、理想的な位置に近づくようにします。結果的に、このやり方は非常にうまくいきました。

「一様乱数を足し合わせて平均値をとった値は正規分布っぽくなるよ」というツイートを見かけて、「それって統計的にどうなんだろう?」という疑問が湧いたので検証してみました。 はじめにPermalink 昨日・一昨日ぐらいにTwitter 上でちょっとした話題になっていた アニメーションの監修で、「 Random();の代わりに、(Random()+Random()+Rrandom()+Random()+Random())/5.0f; を使うと、動きにコクが出る」と言ったら、ピュアオーディオ扱いされるのですが・・・これは根拠のあるアルゴです。 — 深津 貴之 (@fladdict) 2016年11月3日 というツイートに関連して、「一様乱数の平均値を正規乱数として代用する」的なツイートをちらほら見かけて気になっていたので、統計的に検証してみましたよ、というブログエントリです (このツイート自体に

I feel a bit thick at this point. I've spent days trying to fully wrap my head around suffix tree construction, but because I don't have a mathematical background, many of the explanations elude me as they start to make excessive use of mathematical symbology. The closest to agood explanation that I've found is Fast String Searching With Suffix Trees, but he glosses over various points and some a
ハッシュテーブルからエントリーを検索する処理は,一般に定数時間で済むとされている。つまり,どんなにエントリーが増えても検索の速さは変わらない,ということ。データ構造の教科書には必ず載っていることだね。 でも実際には,ハッシュの衝突が起こった場合に,速度の低下が発生する可能性がある。例えば,一般的なチェイン法(オープンハッシュ)だと,衝突したエントリーに関して線形検索を行うことになるから,衝突が多ければ多いほど,定数時間からは遠のいてしまう。 この速度低下を防ぐ方法はいろいろある。なかでも cuckoo hashing (カッコウ・ハッシング)は仕組みが面白い。こいつは,エントリーの検索を必ず定数時間で済ませてくれるという優れものなんだ。 Cuckoo hashing では,2つのハッシュ関数と,2つのテーブルを用いる。ここでは,2つのハッシュ関数をそれぞれ h1, h2 として,2つのテー

GT Nitro: Car Game Drag Raceは、典型的なカーゲームではありません。これはスピード、パワー、スキル全開のカーレースゲームです。ブレーキは忘れて、これはドラッグレース、ベイビー!古典的なクラシックから未来的なビーストまで、最もクールで速い車とカーレースできます。スティックシフトをマスターし、ニトロを賢く使って競争を打ち破る必要があります。このカーレースゲームはそのリアルな物理学と素晴らしいグラフィックスであなたの心を爆発させます。これまでプレイしたことのないようなものです。 GT Nitroは、リフレックスとタイミングを試すカーレースゲームです。正しい瞬間にギアをシフトし、ガスを思い切り踏む必要があります。また、大物たちと競いつつ、車のチューニングとアップグレードも行わなければなりません。世界中で最高のドライバーと車とカーレースに挑むことになり、ドラッグレースの王冠
文書比較(diff)アルゴリズム 前のドキュメント 次のドキュメント ViViの文書比較(diff)機能で使用しているアルゴリズムについて解説する。 これらのアルゴリズムは Myers 氏らの論文によるもので、氏は筆者のためにわざわざ論文をWebサイトで入手可能な形式にしてくださった。この場を借りてお礼申し上げる。 オリジナル論文は以下のWebサイトから入手可能である。 http://www.cs.arizona.edu/people/gene [1] E.W.Myers, "An O(ND) Difference Algorithm andIts Variations", Algorithmica, 1 (1986), pp.251-266 [2] S. Wu, U. Manber, G. Myers and W. Miller, "An O(NP) Sequence Comparis
ふと見つけた「あなたが一番好きなアルゴリズムを教えてください。また、その理由やどんな点が好きなのかも教えてください」を読んで、diffのアルゴリズムを調べてみた。2つのファイルの違いを見つけるには、共通する部分が最長になるペアを見つければよい。これはLCS (Longest Common Subsequence)問題と呼ばれる。LCS問題の最適解は動的計画法を用いて求めることができるが、計算時間、メモリ使用量ともにO(MN)になる*1。これより早く、また小メモリで実行できるようにいろいろなアルゴリズムが提案されている。 テキストを比較するdiffというUnix系のコマンドがありますが、これは実は高度に数学的なエディットグラフというアルゴリズムが使われています。 [1] E.W.Myers, "An O(ND) difference algorithm andits variations"
昨日,PFI セミナーにて「大規模グラフアルゴリズムの最先端」というタイトルで発表をさせてもらいました.スライドは以下になります. 大規模グラフアルゴリズムの最先端 View more presentations from iwiwi 当日は Ustream もされており,録画された発表もご覧になれます. http://www.ustream.tv/recorded/19713623 内容の流れとしては,以下のようになっています. 導入 アルゴリズム界隈での話題 最新の研究動向 道路ネットワークでの最短路クエリ処理 基礎的な手法:双方向 Dijkstra,A*, ALT 最新の手法:Highway Dimension + Hub-Labeling AlgorithmDB 界隈での話題 最新の研究動向 複雑ネットワークでの最短路クエリ処理 基礎的な手法:ランドマークを用いた最短距離推定 最
先日、TimSortというソートアルゴリズムが話題になりました。TimSortは、高速な安定ソートで、Python(>=2.3)やJava SE 7、およびAndroidでの標準ソートアルゴリズムとして採用されているそうです。C++のstd::sort()よりも高速であるというベンチマーク結果1が話題になり(後にベンチマークの誤りと判明)、私もそれで存在を知りました。実際のところ、ランダムなデータに対してはクイックソート(IntroSort)ほど速くないようですが、ソートというシンプルなタスクのアルゴリズムが今もなお改良され続けていて、なおかつ人々の関心を引くというのは興味深いものです。 しかしながら、オリジナルのTimSortのコードは若干複雑で、実際のところどういうアルゴリズムなのかわかりづらいところがあると思います。そこで今回はTimSortのアルゴリズムをできるだけわかりやすく解

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く