algorithmに関するjnstのブックマーク (27)

  • パズルとアルゴリズムのコラボ本を書きました! - けんちょんの競プロ精進記録

    1. はじめに お久しぶりです! けんちょんのけんちょんです。 最近はアルゴリズムがとても盛り上がっていますね。今回新たなアルゴリズムを上梓させていただくことになりました! 発売予定日は 2022/4/20 です。一部大型書店では、もうすでに並んでいるはずです。今回の記事では、このを通してお届けしたいメッセージや、想定読者、内容などについて簡単に紹介させていただきます。 amazon ページへのリンク 2. 書の内容と対象読者 2-1. 書の内容 百聞は一見に如かずということで、まずは目次構成をお見せします! 第 1 章:アルゴリズム入門 第 1 話:「テンパズル」 〜 力まかせ探索 第 2 話:「小町算」 〜 再帰関数 第 3 話:「虫算」 〜 枝刈り 第 II 章:グラフアルゴリズム 第 4 話:「数独」 〜 深さ優先探索 1 第 5 話:「覆面算」 〜 深さ優先探索 2

    パズルとアルゴリズムのコラボ本を書きました! - けんちょんの競プロ精進記録
  • 500 Data Structures and Algorithms interview questions and their solutions - Techie Delight - Quora

  • [入門]二分木を理解するために解説しながら自力実装してみた - Qiita

    二分木とは 木構造を有する非線形データ構造の一種である。 木ADTでは要素の順序は考慮しない。 二分木はどのノードも子を0から2個有す。よって、ルートとルートより左に展開する左部分木と、右に展開する右部分木で一般に可視化できる。 Wiki pedia による二分木の解説 目的 二分木を学ぶことで、データ構造とアルゴリズムに対する理解を深めたい。 pythonで二分木データ構造を実装する。 単に二分木を実装するだけではなく、二分木データ構造の取り扱いかたのハウツーを理解する。 二分探索木の理解を深めるため基礎となる二分木を深堀する ⇒ 親記事 内容 データ構造とノードの定義 ノードは値をもつ(node.data) 子ノードへの接続を持つ(node.left = Node(data)) 子の数は0, 1, 2個のいずれかである 最上位のノードはルートノード(self.root, ins.roo

    [入門]二分木を理解するために解説しながら自力実装してみた - Qiita
  • AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita

    記事を終えた次は? AtCoder Beginners Selection を終えたら、AtCoder 上の過去問が AtCoder Problems に集大成されていますので、片っ端から埋めるような気持ちで精進していきましょう。記事の続編として AtCoder 版!蟻 (初級編) AtCoder 版!蟻 (中級編) AtCoder 版!蟻 (上級編) AtCoder 版!蟻 (発展的トピック編) も執筆しましたので参考にしていただけたらと思います。また、アルゴリズムとデータ構造に関するトピックを集大成した書籍として、 問題解決力を鍛える!アルゴリズムとデータ構造 (通称、けんちょん) を上梓しました。ぜひ読んでみてください。 1. AtCoder とは AtCoder は以下のコンテストサイトを運営しています。今後常に訪れることになるサイトです: AtCoder コンテスト

    AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
  • AtCoderで緑になるまでにやったこと、必要な知識 - Qiita

    はじめに タイトル通りですが緑になりました。これから目指す人の参考になればと思い、この記事を書きます。 https://atcoder.jp/users/mokrai 1. 『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』(https://book.mynavi.jp/ec/products/detail/id=35408) 書籍です。緑になるために必要でない情報も含まれているので、最速で緑になるために必要かと言われたら微妙ですが、これまで学校等でアルゴリズムを学んだことが無い自分にとっては大変勉強になりました。体系的に学べたのが良かったです。 2. ひたすら過去問を解く 私の実績はこんな感じです。(緑になってから1週間後くらい) まず、ABCのC問題を埋めていきました。AtCoder Problemsで各問題のdifficultyを見て、簡単な問題から解いていきました。水

    AtCoderで緑になるまでにやったこと、必要な知識 - Qiita
  • 二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)

    Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。 しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。 この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。 第1回は、最もシンプルな木構造である 二分木 を

    二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)
  • 計算量について、償却/期待/平均など - noshi91のメモ

    記事は皆様からのご指摘を募集しております 誤った記述があるかもしれません 概要 競技プログラミングをやっていると などの表記を見掛けることも多いでしょう *1。 それぞれについて、大雑把な意味をまとめました。 アルゴリズムの挙動の正確な把握は競技においても重要です。 以降、全て時間計算量に付いて議論します。 注: 稿内で用いられる はほとんどが に置き換えられますが、 Big O notation と同時に説明すると混乱を招くと判断し、競技プログラミングにおいて常用されている を使用しています。 最良計算量 多くのアルゴリズムは、入力によって計算量が変化します *2。 例えば、ソートアルゴリズムには大まかに 通りの入力が存在します。 あり得る全ての入力のうちの計算量の最小値を最良計算量と呼び、 を付けて表記します。 線形探索は (最初に求める値が存在した場合) マージソートは 挿入ソー

  • コーディング面接対策のために解きたいLeetCode 60問

    自分がコーディング面接対策のために解いてよかった LeetCode の問題をコンセプトごとにまとめました。カバーするコンセプトは LinkedList Stack Heap, PriorityQueue HashMap Graph, BFS, DFS Tree, BT, BST Sort Dynamic Programming Binary search Recursion Sliding window Greedy + Backtracking です。 これらの問題が 30 分以内に実装できれば面接の準備は整ったと言っていいと思います。Easy と Medium で問題は構成されてます。進捗を管理するためにGoogle Spreadsheetを用意しました。コピペしてご自由にお使いください。 これらの問題は、LeetCode のリスト機能でも公開されています。クローンすれば自分がすでにど

    コーディング面接対策のために解きたいLeetCode 60問
  • AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ

    最新の情報はAtCoder公式情報サイトAtCoderInfoに記載されています info.atcoder.jp 以下、古い記事の内容となります。 近頃「AtCoderの色を就活等でアピールしたい時に上手く出来ない!」と言われるので、「どれくらいのレベルの人なの?」という説明と、エンジニアさん向けに「実際どういう問題が解けるの?」というまとめを書いておきたいと思います。解き方のヒントが書いちゃってあるので、自分で解きたい人は、ヒントを読む前に解いてください。 Update履歴 2020/6/22 茶色・緑色に関する評価を書き足しました。参加人数を更新しました。 2022/10/02  アップデート要求が多くありますが、現状でも大きな変化はありません。(この文章を追記しました) 2023/12/09 公式サイトへのリンクを冒頭に追加しました。この記事は昔のものになります。 大前提:AtCod

    AtCoder(競技プログラミング)の色・ランクと実力評価、問題例 - chokudaiのブログ
  • プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD

    情報科学科の卒業生やプログラマの中には、UberやNetflixのような新興企業や、 AmazonMicrosoftGoogle のような大企業や、InfosysやLuxsoftのようなサービスを基とする企業で、プログラミング、コーディング、ソフトウェア開発の仕事に就きたいと考える人が大勢います。しかし、実際にそういった企業で面接を受ける場合、大半の人が プログラミングに関してどのような質問をされるか 見当もつきません。 この記事では、 新卒生からプログラマになって1〜2年までの 経験値が異なる人たち向けに、それぞれの プログラミングの面接でよく聞かれる質問 をいくつか紹介していきます。 コーディングの面接では、主に データ構造とアルゴリズムに基づいた質問 がされますが、 一時変数を使わずにどのように2つの整数をスワップするのか 、というような論理的な質問もされるでしょう。

    プログラマの採用面接で聞かれる、データ構造とアルゴリズムに関する50以上の質問 | POSTD
  • GitHub - fernet/fernet-go: Fernet generates and verifies HMAC-based authentication tokens.

  • JOSE (Javascript Object Signing and Encryption) is a Bad Standard That Everyone Should Avoid - Paragon Initiative Enterprises Blog

    The latest information from the team that develops cryptographically secure PHP software. Is Your Cryptography Reliable? Our team specializes in studying real world cryptography implementations to assure their correctness and security. Why You Want to Hire Our Company Contact Us No Way, JOSE! Javascript Object Signing and Encryption is a Bad Standard That Everyone Should Avoid March 14, 2017 7:18

  • Practice Go: Merge Sort @ Alex Pliutau's Blog

  • GitHub - xor-gate/bjf: Golang bijective function for url-shorters

    Golang implementation of bijective function algorithm used in url shorters, see: http://stackoverflow.com/questions/742013/how-to-code-a-url-shortener I would continue your "convert number to string" approach. However you will realize that your proposed algorithm fails if your ID is a prime and greater than 52 . Theoretical background You need a Bijective Function f . This is necessary so that you

  • MARISA-TrieをコマンドラインとPythonから使う

    概要 Matching Algorithm with Recursively Implemented StorAge (MARISA) という Trie に対する高い空間効率とそれなりの時間効率を実現するデータ構造があります。 動的な更新には対応していませんが 辞書引き(Lookup) : 入力文字列が登録されているかどうかを確認 逆引き(Reverse Lookup) : 入力された ID から登録文字列を復元 Common Prefix Search : 入力文字列の前半部分に一致する登録文字列を検索 Predictive Search : 入力文字列で始まる登録文字列を検索 といった操作が可能です。 今回は marisa-trie 0.2.4 をベースに コマンドラインプログラム Python バインディング から MARISA を触ってみます。 Install MARISA 環境は

    MARISA-TrieをコマンドラインとPythonから使う
  • ゲームのフラグ管理はビット演算で効率かつ簡単に管理する - Λlisue's blog

    どうも更新をサボりまくりの有末です。 日はゲームなどのフラグ管理に使えるビット演算について書きたいと思います。 進数 日人の100人にアンケートを取れば、おそらく9の次は10と答える人が大多数だと思います。 ただしこれは厳密には間違っていて9の次が10になるのは10進数で物事を考えているからです。 進数というのは簡単に言うと「いつ桁があがるか?」という事です。 例えば普段使用している10進数であれば0から数えて10個目(9)までは1桁で表せますが 11個目(10)からは2桁になります。 なかなかイメージがし難いと思うので以下2進数、8進数、10進数、16進数を見て行きます。 桁がいつ増えるか?に注目してください。 2進数 8進数 10進数 16進数 0 0 0 0 1 1 1 1 10 2 2 2 11 3 3 3 100 4 4 4 101 5 5 5 110 6 6 6 111 7

    ゲームのフラグ管理はビット演算で効率かつ簡単に管理する - Λlisue's blog
  • エンコード方式 base-122 | POSTD

    base-64よりもスペース効率の良い方法。 GitHub レポジトリ 1 概要 バイナリをテキストに変換するエンコード方式としての base-64 は、そのデータ量を33%増大させます。この記事では、UTF-8のテキスト変換方式であり、元のデータから14%増大するbase-122を紹介します。base22はWebを念頭において作られました。 実装 には、Javascriptのデコーダを使い、base-122でエンコードしたリソースをWebページに読み込ませる過程が含まれます。 免責事項 3で示すように、base-122は 大半のWebページが該当します gzip圧縮ページでの使用は推奨しません。ですが、base-122は一般的な文字エンコード方式として役に立つ可能性があります。 1.1 はじめに 画像、フォント、オーディオなどの外部のバイナリリソースは、base-64でエンコードする デ

    エンコード方式 base-122 | POSTD
  • Centroid Path Decompositionを使ったトライでダブル配列と勝負してみた - Preferred Networks Research & Development

    釣りタイトルを付けたかったのですがさっぱり思いつかないのでもう諦めました。徳永です。 今回はCentroid Path Decomposition(以下CPD)についての話を書きます。直訳すると重心パス分解となるでしょうか。Trieを実現するためのテクニック(普通のツリーにも使えるのかな?なかなか難しそうですが…)の一つです。CPDは一年前の弊社岡野原の記事に出てきますが、私のような素人にはあれだけでは理解できない部分があったので、今回はちょっと論文を読んでみました。 Trieの実装によくある問題 Trieを実現するためのデータ構造というとダブル配列とかが挙げられますが、こういった高速なデータ構造にも、ランダムアクセスが多いという弱点があります。メモリはHDDなどと比べるとランダムアクセスに耐えうる記憶媒体ですが、とは言えランダムアクセスは避けられるに越したことはありません。CPDを使うこ

    Centroid Path Decompositionを使ったトライでダブル配列と勝負してみた - Preferred Networks Research & Development
  • Spaghetti Source - Trie

    説明 Trie は文字列のための多分探索木である.各頂点はアルファベットで指定できる枝の集合を持つ.文字列ひとつが根からアルファベットで辺を手繰ることで行き着く頂点に対応する. アルファベットサイズを定数と見たとき,文字列の数に対して trie のサイズは O(m) である.ただし m は蓄えられている文字列の長さの総和.これは通常の二分木で蓄えるのに対して特に不利ではない.検索性能は検索文字列の長さ n に対して O(n) である.これはうまく実装された二分木が O(n + log m) であることと比較して高速である. 結論として,文字列に対して std::map を使いたい場合は trie で代用できないか考えるべきである. 計算量 検索: O(n),ただし n は検索する文字列長. 使い方 Trie *find(char *t, Trie *v); t に対応する Trie の頂点

  • 連想配列はトライでしょ的な話がでていたので入門記事を書いてみた - EchizenBlog-Zwei

    なにやらDan Kogai氏の以下の記事が話題になっている様子。 404 Blog Not Found:Algorithm - 連想配列の実装としてのハッシュはオワコン? 連想配列(キーワードを投げると対応する値が返ってくるデータ構造)はハッシュテーブルで実装するのではなく、これからはトライ(trie)木を使うのがイケてる!(意訳)という内容だった。 連想配列にハッシュテーブルを使うのが良いか悪いかについては色々と意見があると思うので特にこの記事では触れない。 今回は連想配列として使えると話題のトライ木とはなんぞ、という入門的な記事にしようと思う。 トライ木が持つ機能 最初にトライが持つ以下の3つの機能について説明する。 - lookup - common-prefix-search - predictive-searchまずトライは連想配列として利用できる。つまりキーワードと値のペアを登

    連想配列はトライでしょ的な話がでていたので入門記事を書いてみた - EchizenBlog-Zwei