タグ

algorithmとAlgorithmに関するyou21979のブックマーク (12)

  • 分散ロックという名の過ち - Software Transactional Memo

     TL;DR; 「分散ロック」が分散システムの設計図に登場した時 だいたいその設計は間違っていて当に必要なものはトランザクションだ 並行システムを実装する際にロックを用いるのはとても自然なことだ。 僕も普段はロックフリー系のアルゴリズムに詳しいと言われがちだが知識量でいったら実はロック系の方が多く蓄えているかも知れない。 分散システムは並行システムであることが多いので、その中にロックが登場するのはとても自然な発想である。 よく「分散」「並行」「並列」の言葉の定義がごっちゃになっているケースがあり、この記事の主題にしたいわけではないので深くは言及しないが、分散システムは環境などの要因で突如として参加者が音信不通になったり復活したりする点で並行システムと大きく異なる。 並行システムと同じノリで分散システムを設計しようとした際に陥る頻出の過ちが「分散ロック」である。そのアイデアはとても簡単で

    分散ロックという名の過ち - Software Transactional Memo
  • Original source of `(seed * 9301 + 49297) % 233280` random algorithm?

    If you search for examples of creating a seeded (pseudo)Random number generator, you will run into stuff like this (specific example http://indiegamr.com/generate-repeatable-random-numbers-in-js/): // the initial seed Math.seed = 6; // in order to work 'Math.seed' must NOT be undefined, // so in any case, you HAVE to provide a Math.seed Math.seededRandom = function(max, min) { max = max || 1; min

    Original source of `(seed * 9301 + 49297) % 233280` random algorithm?
    you21979
    you21979 2016/03/20
    “9301 is a product of two primes (71x131), 49297 is a prime -- instinctually I feel like that must be relevant. 233280 is not prime ”
  • VisuAlgo moves to https://visualgo.net/en

    Redirecting you to https://visualgo.net/en

  • リード・ソロモン符号 - Wikipedia

    リード・ソロモン符号(リード・ソロモンふごう、Reed-Solomon Coding、RS符号と略記)とは符号理論における誤り訂正符号の一種、訂正能力が高く様々なデジタル機器等で応用されている。 リード・ソロモン符号は1960年にアービング・ストイ・リード(英語版)とギュスタブ・ソロモン(英語版)によって開発された誤り訂正符号である。符号の生成と復号が複雑なので、処理速度が求められる分野ではあまり使用されていないが、その反面誤り訂正能力が高く、地上デジタル放送、衛星通信、ADSLやDVTR、身近なところではCDやDVDやBD、QRコードの誤り訂正に応用されている。 特徴として符号の生成方法にガロア体(有限体)の概念を使用している。これは複数個のビットを一つの固まり(シンボルあるいはワードと呼ぶ)と見なし、符号語をシンボルの集まりで表し各シンボル単位で誤りの検出と訂正を行う。一つのシンボル内

    リード・ソロモン符号 - Wikipedia
  • 基数木(パトリシア) - Wikipedia

    基数木(英: Radix tree)またはパトリシア木(英: Patricia tree)とは、文字列集合を格納するトライ木に基づく特殊化された集合データ構造である。パトリシアトライ(英: Patricia trie)とも。通常のトライ木に比較すると、基数木の辺は単一の文字ではなく文字の並びでラベル付けされる。それは、文字列でもよいし、整数やIPアドレスなどを表すビット列でもよい。辞書式順序を適用できるオブジェクトの並びなら何でもラベルとして使用できる。基数木と言った場合、整数を格納する木構造のみを指すことが多く、パトリシア木といった場合は特に格納するデータを限定しないが、基的に構造や動作原理は同じである。 基数木は簡単に言えばメモリ使用量を最適化したトライ木であり、トライ木で子ノードが1つしかないノードを子ノードとマージしたものである。その結果、内部ノードは必ず2つ以上の子ノードを持つ

    基数木(パトリシア) - Wikipedia
  • 平方数かどうかを高速に判定する方法 - hnwの日記

    平方数とは、ある整数の平方(=二乗)であるような整数のことを言います。つまり、0,1,4,9,16,...が平方数ということになります。 ところで、与えられた整数が平方数かどうかを判定するにはどうすれば良いでしょうか。与えられた整数の平方根の小数点以下を切り捨て、それを二乗して元の数になるかどうか、というのがすぐ思いつく実装です。 <?php function is_square($n) { $sqrt = floor(sqrt($n)); return ($sqrt*$sqrt == $n); } しかし、平方根の計算は比較的重い処理です。もっと高速化する方法は無いのでしょうか。 多倍長整数演算ライブラリGNU MPには平方数かどうかを判定するmpz_perfect_square_p関数が存在します(PHPでもgmp_perfect_square関数として利用できます)。稿ではこの実装

    平方数かどうかを高速に判定する方法 - hnwの日記
  • 大規模なデータをそれなりに効率良く計数できる Algorithm::LossyCount を書いた

    要旨 Algorithm::LossyCount というモジュールを書きました。これを使うとそこそこメモリ効率良く大規模なデータの計数ができます。アクセスランキング集計とかに使えるんじゃないでしょうか。 Github MetaCPAN 動機 例えばブログホスティングサービスで HTTP サーバのアクセスログを集計して人気のあるブログ記事ランキングを出したいとします。 Perl でデータの出現頻度を計数するのはハッシュを使うのが鉄板なので、適当に書くとだいたいこんな感じのコードになると思います: #!/usr/bin/env perl use v5.18; my %access_counts; while (<>) { chomp; my $access_log = parse_access_log($_); next if is_article_request($access_log);

  • Mostly-Concurrent Mark & Sweep GC のアルゴリズム

    目次 1. 前置き 2. HotSpot VM 1.4.x の GC の種類 3. Mostly-concurrent Mark & Sweep 4. 応用 4.1 世代別 GC との組み合わせ 4.2 カードマーキング (Card Marking) 4.3 並列化 (Parallel GC) 4.4 ビットワイズ・スイープ (Bitwise Sweep) 4.5 インクリメンタル・コンパクション (Incremental Compaction) 5. 参考文献 脚注 コメント 1. 背景 ガーベージコレクション(GC) には色々なアルゴリズムが存在するが、大雑把に言って Stop-the-World (STW) 型 GC と On-the-fly 型 GC に大別される。 STW 型の GC はプログラムの実行中にはガーベージの回収を行わず、メモリが枯渇した時になって始めてガーベージの回

  • Common Pitfalls in Writing Lock-Free Algorithms | MemSQL Developer Blog

    Formally, a multi-threaded algorithm is considered to be lock-free if there is an upper bound on the total number of steps it must perform between successive completions of operations. The statement is simple, but its implications are deep – at every stage, a lock-free algorithm guarantees forward progress in some finite number of operations. Deadlock is impossible. The promise of a lock-free al

  • FM音源を学ぶ(1) | Scene Research Station

    唐突にFM音源について考えてみる。 FM音源というのは、周波数変調を特徴としたシンセサイザ。 個人的には昔のPCゲーム機でお馴染みのOPMやOPNをすぐ連想するけど、一般的には小室哲哉や坂龍一が使っていたYAMAHA DX7が有名でしょう。 氏家さんのDX5の解説動画が素晴らしい。 http://www.youtube.com/watch?v=LQ3qFy7gBHA DX7IIDの解説も必見。 http://www.youtube.com/watch?v=xIn-n2ebENo FMの特徴は、その名の通り周波数変調。サイン波のオシレータを直列に繋げられる点がアナログシンセとは大きく異なる。それにより複雑な倍音が作れ、アナログでは難しかったアコースティックな音や、金属音を作ることができる。 一般的にDX7やOPMで使っている変調は以下。 うーん、よく見ると周波数変調というより、位相変調と

  • 入門 機械学習

    目次 訳者まえがき はじめに 1章  Rを利用する 1.1 機械学習のためのR 1.1.1 Rのダウンロードとインストール 1.1.2 IDEとテキストエディタ 1.1.3 Rパッケージの読み込みとインストール 1.1.4 機械学習のためのRの基礎知識 1.1.5 Rに関する情報 2章 データの調査 2.1 探索と確証 2.2 データとは何か? 2.3 データ内の列の型を推論する 2.4 意味推論 2.5 数値による要約 2.6 平均値、中央値、最頻値 2.7 分位数 2.8 標準偏差と分散 2.9 探索的データの可視化 2.10 複数の列の関係の可視化 3章 分類:スパムフィルタ 3.1 白か黒か?二値分類 3.2 やさしい条件付き確率入門 3.3 初めてのベイズスパム分類器を書く 3.3.1 分類器を定義し、非スパム(難)でテストする 3.3.2 分類器をすべての種類の電子メールに対し

    入門 機械学習
  • JavaScript でハッシュアルゴリズム

    Hash algorithm of JavaScript CRC16/32, MD2, MD4, MD5, SHA-1, SHA-256, RIPEMD-128, RIPEMD-160, RIPEMD-256, RIPEMD-320 IE4+, NN4.06+, Gecko, Opera Download CRC16/32 MD2 MD4 MD5 SHA-1 SHA-256 RIPEMD Sample CRC16 CRC32 MD2 MD4 MD5 SHA-1 SHA-256 RIPEMD-128 RIPEMD-256 RIPEMD-160 RIPEMD-320 Input Hash Memo マルチバイト文字から生成されるハッシュ値に疑問を持つかもしれませんが 内部では入力文字の文字コードは Unicode ですので あしからず。 ありえないと思われるので入力データが 0xFFFFFFF

  • 1