タグ

アルゴリズムとHotEntryに関するslay-tのブックマーク (7)

  • アルゴリズムってなに?探索プログラムをPythonで実装してみよう - paiza times

    こんにちは。倉内です。 プログラミング学習をしていると「アルゴリズム」という単語を聞くことがあると思いますが、いつかしっかり勉強しようと思いつつ手を出せていない方も多いのではないでしょうか。 アルゴリズムは独学では少々とっつきにくい分野ですが、アルゴリズムの知識があれば、よりパフォーマンスが高い処理を実現することができます。 特に大量のデータを扱う場合は、ループを何重にも回すなどの単純処理では途方もない処理時間がかかるため、効率のよい方法を採用する必要があります。 そこで今回は「アルゴリズムとはなにか?」から始まり、データ探索を例にアルゴリズムの基を説明していきます。Pythonで実際のコードも書いてみますので、ぜひご自分でも実行して試してみてください。 なぜアルゴリズムを学ぶのか アルゴリズムの基 データ構造を知ろう 配列 スタックとキュー 木構造(ツリー構造) 探索アルゴリズム 線

    アルゴリズムってなに?探索プログラムをPythonで実装してみよう - paiza times
  • JavaScriptで重複排除を自分で実装してはいけない(Setを使う) - Qiita

    若者とプログラミングをしていて非常にショックを受けたのだが「JavaScript 配列 重複 削除」で検索するとfilterとindexOfを使ったアルゴリズムが検索結果上位に出てくる。これはO(N^2)。計算量の概念がないというのはとても恐ろしい。Big Techがアルゴリズム偏重の試験を課すのは合理的だと確信した。 — 父🌒 (@fushiroyama) March 10, 2020 先日このようなツイートが流れてきたので、$O(N^2)$、つまり計算量が $N^2$ に比例するということの恐ろしさを簡単に書きます。 JavaScriptで配列から重複を排除するコード EcmaScript 2015から導入されたSetを使えばものすごく簡単に書けます。 const array1 = [1, 5, 3, 1, 5, 3]; const array2 = Array.from(new S

    JavaScriptで重複排除を自分で実装してはいけない(Setを使う) - Qiita
  • leetcode時代の外資コーディング面接対策 - Qiita

    GAFAMとかFAANGとかいわれるような企業群、あるいはそれに近い傾向(東京であればおそらくIndeedとかPFNとか)のソフトウェアエンジニア面接対策についてメモを残す。 コーディング面接とleetcode 外資IT企業ではソフトウェアエンジニアを雇う際にコーディング面接を非常に重視する。 業務上のコーディングよりは簡単めのプログラミングコンテスト問題に近く、アメリカの学生やエンジニアIT企業を受ける際には事前対策を数ヶ月するのが常識になっているようだ。 一般的な面接プロセスについては世界で闘うプログラミング力を鍛えるというに詳しいが、ソフトウェアエンジニアとしてオファーを得るまでには通常、45~60分程度のコーディング面接を3~5セッション程度経ることになる。 ここ数年、leetcode.comというコーディング面接の過去問サイトが広く候補者に使われるようになっている。 201

    leetcode時代の外資コーディング面接対策 - Qiita
  • セグメント木を徹底解説!0から遅延評価やモノイドまで | アルゴリズムロジック

    セグメント木とは セグメント木とは、完全二分木(全ての葉の深さが等しい木)によって実装された、区間を扱うのに適したデータ構造のことです。 区間に対する操作を対数時間 O(log n) で行えることが特徴で、競技プログラミングなどで頻出となっています。 セグメント木でできること セグメント木は、区間に対する操作やクエリを行うことができます。 特に、 区間上の値を更新する任意の区間上の最小値や合計値などを取得する などが対数時間でそれぞれ行えるのが強みです。 区間上の合計値などは、累積和などを使えば前処理 O(N) ・クエリ O(1) で取得することもできます。しかし、区間上の値の更新と、合計値の取得が入り乱れるような時は、セグメント木の方が有効になることが多いです。 以下では説明のために、区間上の最小値 Range Minimam Query(RMQ) を扱うセグメント木を例として説明します

    セグメント木を徹底解説!0から遅延評価やモノイドまで | アルゴリズムロジック
  • クイックソート VS 挿入ソート、ファイッ! - ABAの日誌

    昇順に並べたいクイックソートと降順に並べたい挿入ソートが殴り合う動画です pic.twitter.com/YxsN1aSI0A— ABA (@abagames) 2020年1月18日 コードとライブデモはこちら。 アルゴリズムの王道ソートアルゴリズムでコードバトリングをしてみたかったので作った。左(赤)のコードが昇順に、右(青)のコードが降順に同一の配列をソートしようとして戦う。昇順に揃ったら左の勝ち、降順に揃ったら右の勝ち。 コードは普通のJavaScriptとして書く。以下の2つの特殊な関数がある。 get(i): 配列からi番目の要素を取得する swap(i, j): 配列のi番目とj番目の要素を交換する setはできない。setを許すとコード内のメモリに配列を逃しておいてソート、一気に書き込むというインチキができるから。右の降順側のgetは要素のマイナスの値が帰ってくるので、右のコ

    クイックソート VS 挿入ソート、ファイッ! - ABAの日誌
  • LIS でも大活躍! DP の配列使いまわしテクニックを特集 - Qiita

    0. はじめに 動的計画法の解法に対しては、「一次元 DP」や「二次元 DP」といった呼称でよびたくなりがちです。たとえば ${\rm dp}[i] := i$ 番目の地点まで到達するまでの最小コスト というような DP テーブルを用いるような DP1 は一次元 DP であり、 ${\rm dp}[i][w] := N$ 個の品物のうち最初の $i$ 個の品物の中から、重さが $w$ を超えない範囲でいくつか選んだときの、選んだ品物の価値の総和の最大値 というような DP テーブルを用いるような DP2 は二次元 DP である、といった具合です。後者はいわゆるナップサック問題に対する DP として有名ですね! 二次元 DP の配列を再利用して一次元へ しかし今回は、DP を一次元や二次元とよぶことにあまり意味がないかもしれない...という話をします。たとえばナップサック DP は、なんと実

    LIS でも大活躍! DP の配列使いまわしテクニックを特集 - Qiita
  • 二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)

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

    二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)
  • 1