タグ

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

  • DFS (深さ優先探索) 超入門! 〜 グラフ・アルゴリズムの世界への入口 〜【前編】 - Qiita

    0. はじめに --- グラフ探索の動機 現代ではコンピュータはとても身近なものになりました。コンピュータの用途としては シミュレーションなどの大規模計算を行う 人工知能をつくる アプリを開発する などなど多様なものが考えられますが、「探索」もまた、コンピュータを用いるモチベーションとして、最も基的かつ重要なものの一つだと思います。探索とは、与えられた対象の中から、目的に合うものを見つけ出したり、最良のものを見つけ出したり、条件を満たすものを列挙したりする営みです。 世の中における様々な問題は、探索によって、考えられる場合を調べ尽くすことによって原理的には解決できるものが多いです。例えば、現在地から目的地まで最速でたどり着く方法を求める問題は、原理的には、現在地から目的地へ到達する経路をすべて列挙することで解決できます1。将棋やオセロの必勝法を求める問題は、原理的には、考えられる局面と

    DFS (深さ優先探索) 超入門! 〜 グラフ・アルゴリズムの世界への入口 〜【前編】 - Qiita
  • Luzhiled’s memo

    ぽよぽよぷりん ここにのっているソースコードは自由に使って頂いて構いませんが、バグっている可能性があります。よく使いそうなライブラリほど信頼度が高めです。 有名事実なんですけど、Luzhiled's memoは最新じゃない(理由:うしですら更新できなくなっているため)ので説明文としての価値があるものだと思った方がよさそう — 年金 レジ (@Luzhiled) September 8, 2020 !!!最新はこちら!!!! Luzhiled’s Library グラフ オイラー路(Eulerian-Trail) グリッド上の幅優先探索(Grid-BFS) テンプレート ハンガリアン法(Hungarian) 二部グラフの最大マッチング(Bipartite-Matching) 二部グラフの最大マッチング(Hopcroft-Karp) 二重辺連結成分分解(Two-Edge-Connected-C

  • 「写像12相」を総整理! 〜 数え上げ問題の学びの宝庫 〜 - Qiita

    0. はじめに: 「数え上げ」という分野について 「条件を満たすものを数え上げる」タイプの問題にはパズルのような楽しさがあります。そのような問題のうち簡単なものは高校数学の「個数の処理・確率」で学ぶのですが、その先にも奥深い世界が待っています。 例: 数え上げテクニック集 (DEGwer さん) 例: 数え上げおねえさん (ERATO 湊離散構造処理系プロジェクト) 記事では数え上げ問題を解くと度々登場する「写像12相」について整理します。写像12相の中でも特に高度なスターリング数と分割数をメインに取り上げます。これらのテーマが直接的に登場する問題はあまり多くはないですが、包除原理や動的計画法といった技法を学べる格好の題材です。簡単な部分についても重複組合せなどの教育的要素を多く含んでいます。 そんな事情もあって、chokudai さんも「競プロで使う基礎的な数学は写像12相がわかればと

    「写像12相」を総整理! 〜 数え上げ問題の学びの宝庫 〜 - Qiita
  • 動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜 - Qiita

    トロピカル半環と呼ばれる代数構造上のトロピカル行列を利用すると動的計画法を使ってグラフの最短経路の距離を計算するという問題が単純な行列積で解けてしまうらしい。そんな噂12を聞きつけて我々はその謎を解き明かすべく南国(トロピカル)の奥地へと向かった。 トロピカルな世界に行くためにはまずは代数を知る必要がある。要するに群・環・体の話だ。しかしこの記事の目的は代数学入門ではないので詳しい話は他の記事3に譲るとし、さっそく半環という概念を導入する。それは 半環は以下の性質を満たす二つの二項演算、即ち加法(和)"$+$" と乗法(積)"$\cdot$" とを備えた集合$R$を言う $(R, +)$ は単位元 $0$ を持つ可換モノイドを成す: $(a + b) + c = a + (b + c)$ $0 + a = a + 0 = a$ $a + b = b + a$ $(R, \cdot)$ は単

    動的計画法を実現する代数〜トロピカル演算でグラフの最短経路を計算する〜 - Qiita
  • 数理最適化の練習問題をLLMを使って自動生成する

    この記事は、数理最適化 Advent Calendar 2023 23日目の記事です。LLMと数理最適化を組み合わせた何かをつくろうということで、数理最適化の練習問題を生成する GPTs、Optima Practiceを作りました。 数理最適化のコミュニティCasual Optimizationを運営していく中で、「数理最適化が世の中に広まらない要因の一つに実践的な練習問題の不足があるのではないか?」という意見を知りました。数理最適化を実ビジネスで利用していく上で必須のスキルとして定式化がありますが、たしかに定式化の力をつけるのにちょうど良い、程よく実践的で複雑な練習問題は案外少ないです。しかし、練習問題を作成するのは結構大変です。そこで、LLMを使って自動化できないか、というのが取り組みの趣旨になります。 作ったもの Optima Practice は、数理最適化の練習問題を生成する

    数理最適化の練習問題をLLMを使って自動生成する
  • Othello is Solved 論文解説 (私見) - Qiita

    今朝起きたら、とんでもない論文を見つけました。 Othello is Solved ゲームの オセロが"解かれた(弱解決)" というのです。飛び起きました。それで、16時まで二度寝してから読みました。 注意すべきは、この論文が査読を経て公開されているわけではないこと、つまり形式上特にチェックを受けたものではないことです。ただ、タイトルからして非常に衝撃的ですので、個人的に読んでみました。この記事では、私がこの論文(およびソースコード)を読んでわかったことを、なるべくわかりやすくまとめます。随時更新します。 余談ですが、このタイトルはどうやら、チェッカーというゲームが以前弱解決された際の論文"Checkers Is Solved"のオマージュだろうという話です。 この記事には専門用語が出てくるので、最後の方に基礎知識として重要な用語や知識をまとめました。 お詫びと訂正 この記事の内容は、私が

    Othello is Solved 論文解説 (私見) - Qiita
  • 入門 B-link tree

    概要 DBMS で広く利用されている B+ tree には様々な variant が存在するが、B-link tree もその1つ。 シンプルなラッチプロトコルで並行アクセスをさばけるよう、リーフノード以外のノードにも右の隣接ノードへのポインタを持たせた構造となっており、PostgreSQL で使われていることでも有名。 この記事では主にこの B-link tree に焦点を当てる。 B+ tree 全般やその他インデックス技術自体に興味がある場合は「最強DB講義 #10 いまどきのデータベース索引技術(石川佳治 教授)」の講義資料を読むのがおすすめ。 B-link tree 理解する上で必須な知識「ラッチ」 「ラッチ」というのはいわゆるロックのことだが、DB においては「ロック」というとトランザクション分離のための高価な(数千CPUサイクルを要する)処理を指すことが多く、「ラッチ」という

    入門 B-link tree
  • MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? 端的に言うと性能が良いからです。 これを理解するにはバッファプールへの理解が必要です。ディスク指向のデータベースの上では有限のメモリを最大限活用することでメモリに入り切らない巨大なデータ群に対して良好な参照性能を出す必要があります。バッファプールとはディスク上のデータの羅列を固定サイズのページ(InnoDBの場合16KB)の羅列であるとして読み書きに必要な分だけをメモリに移し取り複数の書き込みをできる限りメモリ内で受け止めて後でまとめてディスクに書き戻すという、ライトバック型のキャッシュのような機構です。 この中においてバッファプールは有限のサイズしか無いので適宜プール内のデータを書き戻して入れ替えながら上手くやっていく必要があります。 さてB+treeとB-treeの最大の違いは木のリ

    MySQLのインデックスですが、B-treeではなくB+treeを使用するのはどうしてなのでしょうか? | mond
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

    リングバッファのイメージ図 1. リングバッファとは何か 機能的にはFirst In First Out (FIFO)とも呼ばれるキューの一種であるが、リング状にバッファを置いてそれの中でReadとWriteのインデックスがグルグルと回る構造をとる事によって容量に上限ができることと引き換えに高速な読み書き速度を得たものである。キューを単に実装するだけなら山ほど方法があって線形リストを使ってもいいしスタックを2つ使っても原理的には可能だ。その中でもリングバッファを用いた方法の利点はひとえに性能の高さでありメモリ確保などを行わないお陰でシステム系の様々な場所で使われている。 これの実装自体は情報系の大学生の演習レベルの難度であるが少し奥が深い。まずリングバッファのスタンダードなインタフェースと実装は以下のようなものである。 class RingBuffer { public: explicit

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • 暗号の歴史と現代暗号の基礎理論(RSA, 楕円曲線)-後半- - ABEJA Tech Blog

    はじめに このブログに書かれていること 自己紹介 注意 Part3 現代の暗号 共通鍵暗号方式と鍵配送問題 鍵配送問題とは? 共通鍵暗号方式と公開鍵暗号方式の違いとメリット・デメリット RSA暗号 RSAで使われる鍵 処理手順 暗号化の手順 復号の手順 RSA暗号の数学的背景 一次不定式が自然数解を持つ理由 eとLの関係性 そもそもなぜこの式で元の平文に戻るのか?の数学的根拠 証明パート1 フェルマーの小定理 中国剰余定理 RSA暗号をPythonで 楕円曲線暗号 楕円曲線とは? 楕円曲線の式 楕円曲線における足し算の定義 楕円曲線における引き算の定義 無限遠点 楕円曲線における分配法則と交換法則 楕円曲線の加法を式で表現 点Pと点Qが異なる場合 点Pと点P 同じ点を足し合わせる場合 有限体 有限体とは? 有限体上の楕円曲線 楕円曲線暗号における鍵 ECDH鍵共有 数式ベースでの手順説明

    暗号の歴史と現代暗号の基礎理論(RSA, 楕円曲線)-後半- - ABEJA Tech Blog
  • 暗号の歴史と現代暗号の基礎理論(RSA, 楕円曲線)-前半- - ABEJA Tech Blog

    はじめに このブログに書かれていること 自己紹介 注意 Part1 古典暗号 2つの暗号方式 スキュタレー暗号 アルゴリズムと鍵 シーザー暗号 原理 頻度分析 アルベルティ暗号 ヴィジュネル暗号 如何にしてヴィジュネル暗号は破られたか Part2 近代暗号 エニグマ エニグマの登場 エニグマの基構造 如何にしてエニグマは突破されたか 前提条件 必ず異なる文字に変換される性質を利用 ループを利用 まとめ 参考文献 採用情報 はじめに このブログに書かれていること 前半 古代暗号から始まる暗号の歴史 エニグマの構造と解読法について 後半(後半ブログは こちら) RSA暗号の基 楕円曲線暗号の基 自己紹介 こんにちは!株式会社ABEJAの @Takayoshi_ma です。今回のテックブログですが、ネタに5時間程度悩んだ挙句、暗号を取り上げることにしました!暗号化手法の解説にとどまらず、そ

    暗号の歴史と現代暗号の基礎理論(RSA, 楕円曲線)-前半- - ABEJA Tech Blog
  • 【競プロ】新人SEがAtCoderを始めて水色になった【色変記事】 - Qiita

    AtCoderで水色になりました。いわゆる色変記事です。 記事では以下の4点について書きます。 競プロをしていて良かったこと・できるようになったこと 勉強したこと・改善案 レート推移や目標ラインの話 環境やマクロの紹介 最初に自己紹介すると、自分は情報系出身のSEで、現在は2年目です。 今年の頭に競プロをはじめ、先日水色になりました。 「プログラミング未経験から~」「50歳を超えて~」みたいな少数派ではないですし、「たったN回で達成!」「M年の苦闘の末に」みたいなドラマもありません。 普通に勉強しているエンジニア競プロを半年間そこそこ頑張ったみたいな記事です。 バッググラウンドや参加回数については③で詳しく書きます。 なお、競技プログラミングについてザックリ知っている前提で書きます。 「競プロってなに?」「水色ってどのあたりなの?」という場合は が良くまとまっています。 ① 競プロをし

    【競プロ】新人SEがAtCoderを始めて水色になった【色変記事】 - Qiita
  • しっかり学ぶ数理最適化 ヒューリスティック編 - Qiita

    これはどんな記事? 記事は、私がヒューリスティック関連の知識をまとめることになった際に作成したJupyter Notebookを、Qiitaの記事へと改変したものです。 前提としてこれは梅谷俊治先生の「しっかり学ぶ数理最適化 モデルからアルゴリズムまで」という(以下、教科書と表記)の内容に準拠しています。 そしてその内容の多くは、ありがたいことにネット上の様々な形で公開されており、梅谷先生によるスライド1やスライド2、日オペレーションズ・リサーチ学会(以下、ORと表記)での記事1や記事2、そしてORの他の方の記事1や記事2などでも類似した内容を見ることが可能です。 (そしてそれ故に、記事を公開させて頂いています。流石に家の方がネット上で公開されていない内容を書くのは、例え権利的に問題がないとしても気が引けるので……) また、この記事は、それらの内容を踏まえた上で、私がネット上の様

    しっかり学ぶ数理最適化 ヒューリスティック編 - Qiita
  • はじめに - アルゴリズムとデータ構造大全

    はじめに このドキュメントは,主に競技プログラミングで出題される問題を解く際に利用できるアルゴリズムやデータ構造をまとめたものです.特定の問題にはあまりフォーカスしないため,問題を解く際の考察の仕方等の内容はありません.詳しく,正確に,分かりやすく書いていこうと思っています. このドキュメントは執筆途中です. 想定する読者 C++を用いたプログラミングに慣れている方を読者として想定しており,C++言語の仕様や,文法にはあまり触れません.また,計算量という用語についても説明しません.ただし,償却計算量など,計算量の見積もりが複雑なものについては必要に応じて説明します. コードについて このドキュメントで登場するコードは,可読性向上のため,以下のようなコードがファイルの先頭に記述してあることを前提としています.また,適切な問題を用いてコードの検証がなされている場合は,コード周辺にのように,検証

  • アルゴリズムの世界地図 - Qiita

    0. アルゴリズムとは? まず、アルゴリズムとは何かを説明します。(0 節の説明はスライド「50 分で学ぶアルゴリズム」 の説明を参考にして書きました) さて、次の問題を考えてみましょう。 問題: 1 + 2 + 3 + … + 100 の値を計算してください。 単純な方法として、式の通りに 1 つずつ足していく方法が考えられます。すると、以下の図のように答えが計算されることになります。 これで答え 5050 が正しく求まりました。これはれっきとした アルゴリズム であり、この問題を 99 回の足し算 で解いています。しかし、計算回数が多く、計算に時間がかかるのではないかと思った方もいると思います。 ここで、方法を変えて、「1 + 100」「2 + 99」「3 + 98」…「50 + 51」の合計を求めることで、1 + 2 + 3 + … + 100 の値を計算してみましょう。 50 個の

    アルゴリズムの世界地図 - Qiita
  • 50分で学ぶアルゴリズム / Algorithms in 50 minutes

    スライドでは、有名なアルゴリズムを概観し、アルゴリズムに興味を持っていただくことを目標にします。 第 1 部:アルゴリズムとは 第 2 部:学年を当ててみよう 第 3 部:代表的なアルゴリズム問題 第 4 部:コンピュータとアルゴリズム

    50分で学ぶアルゴリズム / Algorithms in 50 minutes
  • あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介! - Qiita

    あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介!PythonアルゴリズムAtCoder競技プログラミングPypy 0.はじめに 2020年の5月よりAtcoderのコンテストに参加してから一年経った、現在水色コーダーとなりました、H20と申します。 AtCoderではPythonを使用して参加しており、水色になるまでに様々なアルゴリズムを使用しました。 アルゴリズムについてはほとんど自作せず、有識者の作成されたスニペットを調べては、ある程度理解しながら使用していました。 この記事では、Pythonにてあるアルゴリズムを使用する際にお勧めな書き方の説明をしているスニペットの記事に、それを利用してACしたコードを添えて紹介していきたいと思います。 (ただ、私のACコードは極力見

    あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介! - Qiita
  • 輸送問題を近似的に行列計算で解く(機械学習への応用つき) - 私と理論

    輸送問題と呼ばれる問題があります. この問題は,普通は線形計画法やフローのアルゴリズムを使って解かれます. この記事では,この輸送問題を近似的に行列計算で解くアルゴリズム(エントロピー正則化 + Sinkhorn-Knopp アルゴリズム)を紹介します. 輸送問題とは アルゴリズム 得られる解の例 なぜこれで解けるのか? 競プロの問題を解いてみる 機械学習界隈における流行 まとめ 輸送問題とは 輸送問題とは以下のような問題です. 件の工場と 件の店舗からなる,ある商品の流通圏があるとする. 各工場には 個の在庫がある.. 各店舗では 個の需要がある. 在庫の総和と需要の総和は等しいとする (すなわち ). 工場 から店舗 に商品を一つ運ぶためには の輸送コストがかかる. 各工場 から各店舗 への輸送量 を適切に決めて,各店舗の需要を満たしつつ輸送コストの総和を最小化せよ. 輸送問題は最適化

  • アルゴリズム・AtCoder のための数学【後編:数学的考察編】 - Qiita

    0. はじめに こんにちは、大学 1 年生になったばかりの E869120 です。記事は、 アルゴリズム・AtCoder のための数学【前編:数学的知識編①】 アルゴリズム・AtCoder のための数学【中編:数学的知識編②】 からの続きです!!! ※前編・中編を読んでいなくても理解できる、独立したトピックになっているので、ご安心ください。 後編から読む方へ 21 世紀も中盤に入り、情報化社会が急激に進行していく中、プログラミング的思考やアルゴリズムの知識、そしてアルゴリズムを用いた問題解決力が日々重要になっています。 しかし、アルゴリズム構築能力・競プロの実力は、単純にプログラミングの知識を学ぶだけでは身につきません。近年、数学的なスキルが重要になりつつあります。実際、私はこれまでの経験で「数学の壁で躓いた競プロ参加者」をたくさん見てきました。そこで記事では、 AtCoder のコン

    アルゴリズム・AtCoder のための数学【後編:数学的考察編】 - Qiita
  • アルゴリズム・AtCoder のための数学【中編:数学的知識編②】 - Qiita

    4. アルゴリズムと密接に関わる数学<中級編> 2 章では問題文を読むために必要なテクニックを 12 個のポイントに絞ってまとめました。しかし、競プロに出題されるようなアルゴリズムだけを考えても、数学と結びつく場面はまだまだたくさんあります。例えば、 3-2. 節では、二分探索の計算量 $O(\log N)$ と対数関数の関係 3-6. 節・3-7. 節では、幾何計算と三角関数・ベクトルの関係 3-11. 節では、経路の数の計算とフェルマーの小定理の関係 について紹介してきました。4 章ではさらに追加で 8 個のトピックを紹介し、アルゴリズムを数学的側面から捉えていきたいと思います。皆さんにアルゴリズムと数学が如何に密接に関わっているかを体感してもらうことが最大の目標です。 なお、3 章・4 章の構成は次のようになっています。 4-12. 最大値検索に学ぶ、微分法(レベル:3) まず、次の

    アルゴリズム・AtCoder のための数学【中編:数学的知識編②】 - Qiita