筆者は新卒エンジニア時代に社内でアルゴリズム勉強会を主催していました。 その内容を本形式に書き起こしたものになります。 【この本の特徴】 📗問題演習形式でアルゴリズムの基礎が身に付く構成となっています。 📗分かりにくい概念は丁寧に図解で解説しています。 📗基礎的なアルゴリズムがどのように世の中に役立っているのかを言及しています。 アルゴリズムに関して、皆さんの理解を深めるお手伝いができれば幸いです。
すごいニュースが飛び込んできた。オセロの必勝法が見つかったのだ。正確に言うとオセロが弱解決された。まずはその論文を紹介する。 Othello is Solved : https://arxiv.org/abs/2310.19387 「弱解決(weakly solved)」を簡単に言うと、初期局面からの双方最善手を打つ時の結論(勝敗)がわかったと言う意味である。8×8のオセロの結論は引き分けなのだそうだ。「必勝法が見つかった」と本記事のタイトルで書いたが、その結果として双方最善を尽くした時のオセロの結論が引き分けだったことが判明したので正しくは「必勝法(必ず勝てる方法)が存在しないことが証明された」とでも言うべきか。 今回は、初期局面から到達できるあらゆる局面についての結論(勝敗)がわかったわけではない。こちらは「強解決(strongly solved)」と呼ばれる。 弱解決と強解決とでは、
IBIS 2023 企画セッション『最適輸送』 https://ibisml.org/ibis2023/os/#os3 で発表した内容です。 講演概要: 最適輸送が機械学習コミュニティーで人気を博している要因として、最適輸送には微分可能な変種が存在することが挙げられる。微分可能な最適輸送は様々な機械学習モデルに構成要素として簡単に組み入れることができる点が便利である。本講演では、最適輸送の微分可能な変種とその求め方であるシンクホーンアルゴリズムを紹介する。また、この考え方を応用し、ソーティングなどの操作や他の最適化問題を微分可能にする方法を紹介するとともに、これらの微分可能な操作が機械学習においてどのように役立つかを議論する。 シンクホーンアルゴリズムのソースコード:https://colab.research.google.com/drive/1RrQhsS52B-Q8ZvBeo57vK
天才プログラマと言われて頭に思い描く人物が複数いて、共通点が実はそんなに無いので共通点を洗い出すのはやめて「自分だったらできないだろうなぁ」という事例を思い出した順に列挙してみます。 しょぼそうな高速化がめちゃくちゃ刺さる凡人に理解できないような天才的なアルゴリズムを用いてめちゃくちゃ計算量を減らしている、なんてことは実はほぼ見かけなくて実際によくあるのがこのパターンです。賢いアルゴリズムというだけなら素養のある秀才ならなんだかんだ思いつくので個人的には天才とまでは感じません。 天才は「Aを受け取って計算してBを返す」みたいな一見平凡な処理に対し「Aの配列を受け取って結果をBの配列にして返す」みたいな誰でも思いつくようなしょぼそうな効率化を行って途方もない効率化を果たします。もちろん凡人が任意の場所でそういう細かい最適化を入れて同様の効率化が再現されるわけではないのですが、天才はただのバッ
不正アクセスによるIDとパスワードの漏洩を受けて、MD5によるハッシュ化について話題になっていました。システムを作る上で、パスワードの管理や認証はどう設計すべきかを考えるために、少し整理をしてみます。もし事実誤認があれば、どしどしご指摘ください。 == 2023/8/21追記 == この記事は、ハッシュの保存の仕方一つとっても、沢山の対策方法が必要であるということをお伝えするために記載しています。そして、これから紹介する手法を取れば安全とお勧めしている訳ではないので、その点をご留意いただければと思います。攻撃手法に応じての対応策の変遷を知っていただくことで、セキュリティ対策は一度行えば安全というものではないことを知って頂くキッカケになれば幸いです。 == 追記終わり == パスワードのハッシュ化 まず最初にパスワードの保存方法です。何も加工しないで平文で保存するのは駄目というのは、だいぶ認
はじめに このブログに書かれていること 自己紹介 注意 Part1 古典暗号 2つの暗号方式 スキュタレー暗号 アルゴリズムと鍵 シーザー暗号 原理 頻度分析 アルベルティ暗号 ヴィジュネル暗号 如何にしてヴィジュネル暗号は破られたか Part2 近代暗号 エニグマ エニグマの登場 エニグマの基本構造 如何にしてエニグマは突破されたか 前提条件 必ず異なる文字に変換される性質を利用 ループを利用 まとめ 参考文献 採用情報 はじめに このブログに書かれていること 前半 古代暗号から始まる暗号の歴史 エニグマの構造と解読法について 後半(後半ブログは こちら) RSA暗号の基本 楕円曲線暗号の基本 自己紹介 こんにちは!株式会社ABEJAの @Takayoshi_ma です。今回のテックブログですが、ネタに5時間程度悩んだ挙句、暗号を取り上げることにしました!暗号化手法の解説にとどまらず、そ
前振り 全国の暗号を使うエンジニアの皆さんこんにちは。今日は暗号移行とRSA暗号の話をしたいと思います。まず暗号を利用している皆さんであればCRYPTRECの「電子政府推奨暗号リスト」のことはご存じですよね!(言い切るw) CRYPTRECから2022年7月(昨年夏)に暗号強度要件(アルゴリズム及び鍵長選択)に関する設定基準(PDF直リンク)が公開されました。この中では暗号のセキュリティ強度で各種暗号と鍵長が整理されています。セキュリティ強度はビットセキュリティと呼ばれるビットサイズ(共通鍵暗号の場合のビット長)で区分されます。暗号アルゴリズムが違ってもセキュリティ強度で比較ができるということですね。例えば現在一般的に良く使われているセキュリティ強度は112ビットセキュリティが多く、これにはデジタル署名であればRSA暗号の2048ビットやECDSAのP-224等が含まれます。今日は公開鍵暗
基本的なデータ構造であるヒープについて、概要、計算量と実装、そして最もシンプルな応用であるヒープソートを紹介します。MITが講義や資料を公開しているMIT OpenCourseWareのアルゴリズムとデータ構造の講義 が非常にわかりやすかったので、その内容に沿ってまとめました。この記事ではHeaps and Heap Sortの内容を以下の順序で解説します。 ヒープの概要ヒープの表現ヒープの構築ヒープの計算量ヒープの実装ヒープソート1. ヒープの概要ヒープ (heap) は優先度付きキュー (priority queue) の実装の1つです。優先度付きキューは集合 (set) を扱うデータ型で、集合に含まれる要素が何らかの優先度 (priority) 順に取り出されるという特徴を持っています。学会のポスター発表を回るときや、旅行先での観光地巡りでは、優先度に基づいて要素を取り出すことが重要
0. 目次 1. クッキークリッカーとは? 2. クッキークリッカー100万枚RTA 3. 解答? 4. 解答 5. 余談 6. おわりに 1. クッキークリッカーとは? 皆さんはクッキークリッカーというゲームをご存じでしょうか? 2013年に公開され同年に日本でも爆発的に流行を見せたゲームです。知らないよという方もご安心ください、最初の方だけですがざっくり説明します。 上の画像がプレイ画面です。左にあるクッキーをクリックします。 クッキーが1枚焼けました。やったね。 クッキーが15枚貯まりました、右側にあるカーソルをクリックしてみます。 指はどこだ!? クッキーの周りにある指が10秒に1回クッキーをクリックしてくれます。助かるー。 100枚貯まりました。アップグレード「強化された人差し指」を買ってみます。 クッキーの上に、クリックした回数分「+2」と書かれています 1回のクリックでクッキ
テキストエディタのデータ構造 Gap method Piece Table method Piece Table の構造 Piece Table の実装 Piece Table のメソッド まとめ テキストエディタのデータ構造 テキストエディタで採用されているデータ構造にはいろいろあります。 こちらの論文 Data Structures for Text Sequences では各種データ構造について比較検討されています。 多くは、Gap method や Piece table method をベースにしたものが多いのではないでしょうか(図で言う最下部の中心の丸印に当たります)。最近では Rope なども有名ですね。 Gap method Gap method では、現在のカーソル位置で、テキストバッファを2つに分割し Gap を間に挟み、カーソル位置に対する編集(テキスト追加/削除)を
こんにちは。@kenkoooo です。 教科書に載っているようなアルゴリズムって勉強しても仕事では全然使わない、と見せかけて意外と使うなぁと感じたので、仕事で見たことがあるアルゴリズムをいくつか紹介します。 広告を配信したい! あなたはウェブサービスの会社で働いています。サービス利用者のユーザーに広告を配信することで、広告主からお金をもらっています。 あなたは今から広告主からもらった広告をユーザーに配信します。 広告主が 社います。 広告主 は広告を 人に配信したいです。 配信対象となるユーザーが 人います。 ユーザー は広告主 の広告は受け取りを許可しています。 ユーザー は、合計 件までしか広告を受け取りたくないです。 上記のような条件の中で、どのように広告を配信したら良いでしょうか? 条件を整理する 条件を整理してみましょう。 各ユーザーごとに、受け取りを許可している広告主がいます。
2022/08/09 追記 「RFC 9293 Transmission Control Protocol (TCP)」として正式なRFCが出ました TCPのコア部分の仕様は1981年に発行された「RFC793 TRANSMISSION CONTROL PROTOCOL」で標準化されています。 この、RFC793の改訂版となる「Transmission Control Protocol (TCP) Specification」は、2013年からIETFのTCPM WGで議論されてきましたが、4月4日にIESGによって承認されました(参考URL)。現在はRFC出版の準備に入っています(新しいRFC番号はこの後正式に決まります) www.ietf.org 改めてTCPの仕様を読みたい場合はこのドキュメントを読むのが良さそう。 概要 この改訂版の仕様(通称 rfc793bis)は、RFC793が
Gödel’s first incompleteness theorem states that there are mathematical statements that can neither be proven or disproven. His proof is fairly difficult to understand - it involves prime numbers, factorization, all this number theory. Gödel’s proof had to be complicated because in 1931, computer algorithms hadn’t really been invented. Turing machines would only be invented in 1936, five years lat
はじめに 本書は,筆者が長年書き溜めた様々な実務的な最適化問題についてまとめたものである. 本書は,Jupyter Laboで記述されたものを自動的に変換したものであり,以下のサポートページで公開している. コードも一部公開しているが,ソースコードを保管した Github 自体はプライベートである. 本を購入した人は,サポートページで公開していないプログラムを 圧縮ファイル でダウンロードすることができる. ダウンロードしたファイルの解凍パスワードは<本に記述>である. 作者のページ My HP 本書のサポートページ Support Page 出版社のページ Pythonによる実務で役立つ最適化問題100+ (1) ―グラフ理論と組合せ最適化への招待― Pythonによる実務で役立つ最適化問題100+ (2) ―割当・施設配置・在庫最適化・巡回セールスマン― Pythonによる実務で役立つ
1. はじめに こんにちは、はじめまして。東京大学 1 年生の米田優峻(E869120)と申します。私は競技プログラミングが趣味で、AtCoder や国際情報オリンピックなどの大会に出場しています1。2021 年 11 月時点で、AtCoder では赤色(レッドコーダー)です。また、2020 年以降、アルゴリズムを学べる以下のようなコンテンツや資料を作成してきました。 レッドコーダーが教える、競プロ上達ガイドライン 競プロ典型 90 問 50 分で学ぶアルゴリズム さて、このたびは技術評論社から、書籍を出版させていただくことになりました2。アルゴリズムと数学が同時に学べる新しい入門書です。 「アルゴリズム×数学」が基礎からしっかり身につく本 - amazon 発売日は今年のクリスマス、2021/12/25 です。電子書籍版も同時期に出る予定です。本記事では、この本の内容と想定読者について、
本スライドでは、有名なアルゴリズムを概観し、アルゴリズムに興味を持っていただくことを目標にします。 第 1 部:アルゴリズムとは 第 2 部:学年を当ててみよう 第 3 部:代表的なアルゴリズム問題 第 4 部:コンピュータとアルゴリズム
計算量についてのお話です。対象は、プログラミング経験はあるが計算量のことを知らない初心者から、計算量のことを知っているつもりになっている中級者くらいです。 数式を見たくない人にとっては読むのが大変かもですが、深呼吸しつつ落ちついて読んでくれるとうれしいです。 それから、この記事が自分には合わないな〜と思ったときは、(別の記事を Qiita とかで検索するよりも)この記事の一番下の 参考文献 にある本を読むことをおすすめします。Amazon の試し読みで無料で読めます*1。 TL; DR 関数の増加度合いのことをオーダーと呼ぶよ 計算量は、入力サイズ(など)を受け取ってアルゴリズムの計算回数(など)を返す関数だよ その関数のオーダーについての議論がよく行われるよ オーダーを上から抑えるときは \(O\)、下から抑えるときは \(\Omega\) を使うよ オーダーを上下両方から抑えたいときは
Sorting colors in JavaScriptJune 22, 2021How to sort colors in JavaScript? Let me tell you a story first. In the project I'm working on right now we used to have 134 colors in use! WTF?! you say. Once I discovered that I thought I'm going to show that to my colleagues, and we will address the problem. Unfortunately, I'm a very visual person (so to say) and I couldn't stand the very random order of
サンマー𝕏 @xeye_ 裏庭に入るイノシシ捕まえる機械、は何回かお願いされたことがあった。ニワトリがやられないようにということで。平均体温が人間より高めなのを利用して赤外カメラと重量計でやったんだけど、テスト中に裏庭に侵入していたNHK集金社員を捕獲していてやる気無くした。 2021-06-22 09:55:33 サンマー𝕏 @xeye_ アルゴリズムとしては以下 1. 35度から40度くらいの体温を持つ物体がウロウロと歩き回る 2. ニワトリ小屋を開けようとして失敗→ガチャガチャ 3. 部屋を覗き込むかつ重量センサーが40kg以上を感知 この全てがマッチすると、家の人の挙動ではないかつ不審ということで捕獲システム発動 2021-06-22 10:07:59
あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介!PythonアルゴリズムAtCoder競技プログラミングPypy 0.はじめに 2020年の5月よりAtcoderのコンテストに参加してから一年経った、現在水色コーダーとなりました、H20と申します。 AtCoderではPythonを使用して参加しており、水色になるまでに様々なアルゴリズムを使用しました。 アルゴリズムについてはほとんど自作せず、有識者の作成されたスニペットを調べては、ある程度理解しながら使用していました。 この記事では、Pythonにてあるアルゴリズムを使用する際にお勧めな書き方の説明をしているスニペットの記事に、それを利用してACしたコードを添えて紹介していきたいと思います。 (ただ、私のACコードは極力見
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く