タグ

algorithmに関するmapk0yのブックマーク (28)

  • Raft(分散合意アルゴリズム)について

    Raftについて Raftという分散合意アルゴリズムの紹介 論文: In Search of an Understandable Consensus ALgorithm (Extended Version) 注意 Raft三日目くらいの人が自分の理解をもとに(適当に)書いています いつも通り用語の使い方は怪しい Raftと分散合意のどちらも特別詳しい訳ではないので、ちゃんと知りたい人は上記論文や他の説明を参照することを推奨します Raftって何? ざっくりと 分散合意アルゴリズム Paxos(おそらく有名な分散合意アルゴリズム)の改良版的な位置づけ(?) 機能追加や性能向上ではなく__理解可能性__の改善 etcdというCoreOS/Dockerをクラスタ化するためのツールで採用されているのが有名? 詳しくは知らないですが... 分散合意アルゴリズム クラスタ内の全サーバに一貫性のあるステ

    Raft(分散合意アルゴリズム)について
  • strlen() の深淵 - Qiita

    あらまし strlen() という関数がある。御存知の通り、文字列の長さを算出する標準 C ライブラリの関数だ。 やってることは単純で、例えば以下のように実装できる。 size_t strlen_simple(const char* str) { const char* p = str; while (*p) ++p; return size_t(p - str); } '\0' が見つかるまでポインタを進め、初期位置との差分を返すだけだ。これで機能的には std::strlen() と同等である。 では、速度的にはどうだろう?適当にベンチマークを書いて MSVC 2022 でコンパイル&実行するとこうなった。

    strlen() の深淵 - Qiita
  • 徐々に高度になるリングバッファの話 - Software Transactional Memo

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

    徐々に高度になるリングバッファの話 - Software Transactional Memo
  • GNU tar 1.31登場、圧縮アルゴリズム「Zstandard」に対応

    GNU tarの開発者であるSergey Poznyakoff氏は1月2日(米国時間)、メーリングリスト「tar-1.31 released [stable]」において、GNU tarの最新版となる「GNU tar 1.31」の公開を伝えた。 GNU tar 1.31の主な注目点は次のとおり。 Zstandard圧縮アルゴリズムをサポート(--zstd)。圧縮時は--zstdを指定することで利用できるほか、-aが指定されている場合は拡張子が.zstまたは.tzstの場合には自動的に適用されるようになる。リスト、展開、比較の操作では自動的に利用される -Kオプションで名前を指定することで、該当する名前のメンバーを展開することが可能 バグ修正と脆弱性対応 GNU tarはLinuxをはじめUNIX系オペレーティングシステムでよく使われているアーカイバ。利用される圧縮アルゴリズムは時代とともに変

    GNU tar 1.31登場、圧縮アルゴリズム「Zstandard」に対応
  • ヒープについてわかりやすく解説してみた – Yasufumi Taniguchi – Medium

    的なデータ構造であるヒープについて、概要、計算量と実装、そして最もシンプルな応用であるヒープソートを紹介します。MITが講義や資料を公開しているMIT OpenCourseWareのアルゴリズムとデータ構造の講義 が非常にわかりやすかったので、その内容に沿ってまとめました。この記事ではHeaps and Heap Sortの内容を以下の順序で解説します。 ヒープの概要ヒープの表現ヒープの構築ヒープの計算量ヒープの実装ヒープソート1. ヒープの概要ヒープ (heap) は優先度付きキュー (priority queue) の実装の1つです。優先度付きキューは集合 (set) を扱うデータ型で、集合に含まれる要素が何らかの優先度 (priority) 順に取り出されるという特徴を持っています。学会のポスター発表を回るときや、旅行先での観光地巡りでは、優先度に基づいて要素を取り出すことが重要

    ヒープについてわかりやすく解説してみた – Yasufumi Taniguchi – Medium
  • キャッシュアルゴリズムの比較 - falsandtruのメモ帳

    アプリケーションなどOSより上に作られる高水準のプログラムではハードウェアの速度と容量を考慮しない数学的キャッシュアルゴリズムが使われ主にこれを稿の対象とする。キー探索用マップと明示的キャッシュサイズ(対となる値が保持されているキーのサイズ)は計算量に含まれない。 LRU 最も単純かつ高性能な基礎的キャッシュアルゴリズム。そのため性能比較のベースラインとして常に使用される。逆に言えば実用最低水準の性能である。スキャン耐性皆無でスキャン一発でキャッシュとヒット率がリセットされゼロからやり直しになるため非常に脆く不確実な性能となりベンチマークにおける性能が表面上さほど悪くなく見えても実際の性能はこのような外乱により大きく低下しやすい。このためLRUより高度な主要アルゴリズムはすべて大なり小なりスキャン耐性を備えている。ちなみにプログラミング言語最大のパッケージマネージャであるJavaScri

    キャッシュアルゴリズムの比較 - falsandtruのメモ帳
  • クッキークリッカーで学ぶアルゴリズム入門 : あすなろの雑記

    0. 目次 1. クッキークリッカーとは? 2. クッキークリッカー100万枚RTA 3. 解答? 4. 解答 5. 余談 6. おわりに 1. クッキークリッカーとは? 皆さんはクッキークリッカーというゲームをご存じでしょうか? 2013年に公開され同年に日でも爆発的に流行を見せたゲームです。知らないよという方もご安心ください、最初の方だけですがざっくり説明します。 上の画像がプレイ画面です。左にあるクッキーをクリックします。 クッキーが1枚焼けました。やったね。 クッキーが15枚貯まりました、右側にあるカーソルをクリックしてみます。 指はどこだ!? クッキーの周りにある指が10秒に1回クッキーをクリックしてくれます。助かるー。 100枚貯まりました。アップグレード「強化された人差し指」を買ってみます。 クッキーの上に、クリックした回数分「+2」と書かれています 1回のクリックでクッキ

    クッキークリッカーで学ぶアルゴリズム入門 : あすなろの雑記
  • 食べログ側に賠償命令、評価点下落「優越的地位の乱用」 - 日本経済新聞

    グルメサイト「べログ」で評価点が不当に下がり、売り上げが減少したとして、飲チェーン店がサイト運営のカカクコムに約6億4000万円の損害賠償などを求めた訴訟の判決が16日、東京地裁であった。林史高裁判長は独占禁止法が禁じている「優越的地位の乱用」に当たると判断。チェーン店側の請求を認め、カカクコムに3840万円の支払いを命じた。原告側によると、評価点を決めるルールの「アルゴリズム」(計算手法

    食べログ側に賠償命令、評価点下落「優越的地位の乱用」 - 日本経済新聞
  • Google Cloud 上で 100 兆桁の円周率を計算 | Google Cloud 公式ブログ

    ※この投稿は米国時間 2022 年 6 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。 記録は破るためにあります。2019 年、Google は 31 兆 4000 億桁の円周率を計算し、当時の世界記録を樹立しました。そして 2021 年には グラウビュンデン応用科学大学 の科学者が、さらに 31 兆 4000 億桁上回る計 62 兆 8000 億桁を計算しました。そして日、Google は100 兆桁の円周率を計算し、世界記録を更新したことを発表します。 Google Cloud を使って円周率の桁数の世界記録を更新1するのは今回で 2 度目で、わずか 3 年で桁数を 3 倍に伸ばしました。 この新記録は、 Google Cloud のインフラストラクチャが年々高速化していることの証とも言えます。記録達成の背景には、 Google Cloud の安全でカ

    Google Cloud 上で 100 兆桁の円周率を計算 | Google Cloud 公式ブログ
  • RSAに対するフェルマー攻撃 - Qiita

    はじめに(Introduction) RSAの鍵ペアの生成方法にミスがあり脆弱性となってしまった実装例があったようです。 元の文献を機械翻訳(ちょっと修正)してみます。 原文のデモをやってみたところ、案外動いたので先にデモを記します。 デモ(Demo) まずは、素数$p$と$q$を生成して$N$を求めるところです。 ※:鍵長が2048bitなので多少時間がかかります。 問題となったライブラリがこのようなロジックであったかは不明ですが、翻訳した資料を参考に作成しています。 import random as rnd import sympy key_length = 2048 distance = 10000 p = 0 q = 0 # 乱数Xを生成する。 X = rnd.randrange(2, pow(2, key_length)) for i in range(distance): #

    RSAに対するフェルマー攻撃 - Qiita
  • Sha256 Algorithm Explained

    Sha256 algorithm explained online step by step visually

    Sha256 Algorithm Explained
  • 50分で学ぶアルゴリズム / Algorithms in 50 minutes

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

    50分で学ぶアルゴリズム / Algorithms in 50 minutes
  • Euler Tour のお勉強 | maspyのHP

    Euler Tour (1) DFS 順に探索して、通った頂点の列を記録する($1,2,3,4,3,2,5,2,1,6,1$)。 (2) 各頂点 $i$ について、最初に通った時刻と最後に通った時刻 $\mathrm{in}[i]$, $\mathrm{out}[i]$ を覚える。 参考: ・アリ p. 294 (Euler Tour の名前は出ていませんが)Euler Tour による LCA の計算。 登場する頂点を並べますが、計算で必要になるのはむしろ、$\mathrm{in}[i]$, $\mathrm{out}[i]$ の方ですね。例えば閉区間 $[\mathrm{in}[i], \mathrm{out}[i]]$ を見ると、$i$ を根とする部分木 $\mathrm{subtree}_i$ の頂点が分かるという特徴があります。木に対する主要な計算のいくつかを、区間に対する計算

    Euler Tour のお勉強 | maspyのHP
  • Simplifying Raft with Chaining

    Written by Heidi Howard, Natacha Crooks, Ittai Abraham Posted on July 17, 2021 Raft is a consensus algorithm for deciding a sequence of commands to execute on a replicated state machine. Raft is famed for its understandability (relative to other consensus algorithms such as Paxos) yet some aspects of the protocol still require careful treatment. For instance, determining when it is safe for a lead

    Simplifying Raft with Chaining
  • Binary search with modern processors

    第16回 StringBeginners での発表資料

    Binary search with modern processors
  • マルチコアのCPUを使い切って圧縮を速くする - それマグで!

    gzip の限界 = CPU 1コア マルチコア・マルチスレッドのCPUがあるのに、gzip や lzma(xz)や bzipといったメジャーな圧縮は、CPUを1コアで処理するんですね。 CPU使用率を見てみたら、CPU利用率は100%を超えないんですね。 HDD・SSDの書き込み速度に限界があるからそれでも良かったんだろうが。いまはメモリが一般的に64GBもある時代です。うちのマシンでもメモリが12GBもあるのに3GB程度の圧縮に、5分とか耐えられません。もうちょっと速くしたい。 cpu利用率が100%で頭打ちになる。gzip gzipを使ってると、CPU利用率が100%で止まるんですよね。lzma などの他の圧縮でも同じ。 gzip/ gunzip をマルチで処理する pigz / unpigz Pigz のマニュアルには次のように書いてある。スレッドを使って並列処理をするっぽい。 P

    マルチコアのCPUを使い切って圧縮を速くする - それマグで!
  • メルセンヌツイスタはそんなに衝突しない - Qiita

    κeenです。こちらのスライドが話題になっているようです。 10秒で衝突するUUIDの作り方 - Speaker Deck 笑い話としても乱数の難しさの側面としても面白いのですが、これを見た人たちの反応がちょっと勘違いしてそうだったので補足します。 別に私は暗号とか乱数とかの専門家ではないです。 発表者の方のコードは読みましたか? 少し速度が必要になるのでRustに移植します。 [package] name = "genuuidv4" version = "0.1.0" edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] rand = "0.7.2" sfmt = "0.6.0" use

    メルセンヌツイスタはそんなに衝突しない - Qiita
  • 様々なrate limitアルゴリズム - Carpe Diem

    概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると大規模トラフィックに対応できずシステムがスローダウンしてしまうため、何かしらrate limitをかけておいた方が良いです。 ただしrate limitと一口に入っても色々あるため、今回は主なrate limitアルゴリズムを紹介します。 Leaky bucket Leaky bucketはデータ転送レートを一定にする(=上限を設定する)アルゴリズムです。 下の図のように、様々な流量の水流がそのバケツに流れ込んでも小さな穴からは一定の水流が流れ出す仕組みです。 ref: What is the difference between token

    様々なrate limitアルゴリズム - Carpe Diem
  • https://github.com/trekhleb/javascript-algorithms/blob/master/README.ja-JP.md

    https://github.com/trekhleb/javascript-algorithms/blob/master/README.ja-JP.md
  • Rendezvous Hashingについての雑感

    先日、 Rendezvous Hashingというアルゴリズムを小耳に挟んだ。少し興味をひかれ、軽く調べつつ実装してみたので、その感想。 ※ 思いついたことをテキトウに書いているだけであり、間違っている情報を含んでいる可能性もあるので注意 RendezvousHashingアルゴリズム実装の参考にしたのはWikipediaの記事(ちゃんと知りたい人はリンク先を参照のこと)。Highest random weight (HRW) hashingとも呼ばれるらしい。 目的いわゆる分散ハッシュテーブル問題を解くためのアルゴリズムの一つ。 例えば「あるオブジェクトOを冗長度kで保存したい」として、そのために「格納先として、n個のサーバ群の中からk個を選択する」といったことを、各クライアントが独立して(ローカルな計算のみで)、かつ、一貫性を維持した形(i.e., クライアント間で選択結果に差がでない