タグ

algorithmとprogrammingに関するzaki1010のブックマーク (14)

  • DocBaseの同時編集機能を実現しているアルゴリズム – KRAY Inc.

    はじめに 皆さんはGoogleドキュメントやHackMDを使ったことはあるでしょうか。これらのツールは「ネット越しに同時に複数の人で1つのドキュメントを編集できる」という特徴を持っています。お互いの編集がリアルタイムに反映されるので、相手が何を書くのかを意識することなく、簡単にドキュメントを複数人で編集することができます。これを実現するためには、同時編集に参加しているユーザ全員の編集内容がネットワークの延滞に影響されることなく、それぞれの編集内容をうまい具合にマージして反映してくれるような賢いアルゴリズムが必要になります。今回はこのアルゴリズムに関して書きます。 編集内容のマージとは 編集内容をうまい具合にマージしなければいけないケースを考えてみます。 AさんとBさんが次のドキュメントを同時編集するとします。最初は、お互いブラウザ上では次のように見えています。当然、この状態ではお互いに見え

    DocBaseの同時編集機能を実現しているアルゴリズム – KRAY Inc.
  • 30 分でわかる!アルゴリズムの基本

    このスライドは、2022/4/14 に実施されたイベント『問題解決のための「アルゴリズム × 数学」- Forkwell Library #1』の基調講演を加筆修正したものです。実際の講演(35 分)を見たい方は、以下の URL をご覧ください。 https://www.youtube.com/watch?v=2OrsR37_GdM 【目次】 第一章 アルゴリズムとは(pp. 1~19) 第二章 アルゴリズムの例 A:迷路の探索(pp. 20~79) 第三章 アルゴリズムの例 B:プログラムのデバッグ(pp. 80~126) 第四章 アルゴリズムの例 C:映画鑑賞の最適化(pp. 127~154) 第五章 講演のまとめ(pp. 155~162)

    30 分でわかる!アルゴリズムの基本
  • はじめに - アルゴリズムとデータ構造大全

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

  • 操車場アルゴリズム - Wikipedia

    中置記法からRPNへの変換は、数式を簡単に単純化するのにも使える。そのためにはRPNの式を評価するようにし、値がヌルの変数が出てきたり、値がヌルの演算子が出てきたら、そのパラメータと共に出力に書き込めばよい(これは単純化であり、パラメータが別の演算子だった場合には問題が生じる)。ヌルのパラメータがない演算子の場合は、単にその値を出力に書き込めばよい。この技法は明らかにあらゆる単純化を含んでいるわけではない。それは定数畳み込みの最適化に近い。 C言語での実装例[編集] #include <string.h> #include <stdio.h> #include <stdbool.h> // 演算子 // 優先順位 : 演算子 : 結合性 // 4 :  !  : 右結合性 // 3 : * / % : 左結合性 // 2 : + -  : 左結合性 // 1 : =  : 右結合性 int

    操車場アルゴリズム - Wikipedia
  • アルゴリズムビジュアル大事典

    このサポートページでは、マイナビ出版発行の書籍「アルゴリズムビジュアル大事典」にて作成しましたシンボル、アニメーション、疑似コードを掲載いたします。また、内容のアップデートを行ってまいります。詳しい解説は、書をご参考にしてください。 アニメーションコントローラの使い方はクイックマニュアルでご確認頂けます。 補足情報が表示されているトピックにつきましては、ご注意ください。その他の訂正等は正誤表をご覧ください。ご質問、不具合等のご報告は、ご遠慮なくy.watanobe@gmail.com(渡部)までお送りください。

  • 整数を可逆スクランブルする - C Sharpens you up

    2年前につぶやいた内容の詳しい説明。 32ビット整数をとりあえずスクランブルするすごく簡単な方法に気付いてしまった。なにか奇数をかけると、それにかければ元の数に戻るような奇数が必ずひとつあるから、それを力任せで見つけてしまえばいいんだ。ビット回転→奇数をかけるを3回繰り返すとほぼバラバラ。— ゆば大好き (@yuba) October 18, 2011 整数を、暗号ライブラリ使うほどじゃないんだけどスクランブルしたいことってあるんですよね。たとえば、IDを連番で振ってるんだけど連番だってことがユーザーにわかってしまうと具合が悪いとか。そういうときの簡単なスクランブル方法です。ただし、符号なし整数でしか使えないのでこの時点でJavaは対象外ごめんなさい。 まず32ビット整数版のC,C++,C#で動くコードです。 uint Scramble(uint v) { // 奇数その1の乗算 v *=

    整数を可逆スクランブルする - C Sharpens you up
  • 重複のない10桁の数字をIDとして採番するアルゴリズムを教えて下さい。…

    重複のない10桁の数字をIDとして採番するアルゴリズムを教えて下さい。 但し、下記の条件があります。 - 最低でも1億以上、採番可能なもの - 時系列や連番など推測されやすいものはNG - 基的にデータベースを使用せずアルゴリズム内だけて採番(但しカウントアップ用で使うならOK) - 数字が一意であると保証されていること 以上になります。 PHPのコードで書かれてると、なお有り難いです、 宜しくお願いします。

  • ID生成大全 - Qiita

    セッションIDやアクセストークン、はたまた業務上で使う一意の識別子など、いろんなところで一意のIDを生成しなきゃいけないケースが存在します。 そこで世間で使われているIDの生成方法について調べてみました。 選択基準 ID生成における要求として、以下の観点が上げられるかと思います。 生成の速度 大量にデータを短期間で処理し、それらにIDを付与する場合、ID生成そのものがボトルネックとなることがあります。 推測困難性 IDを機密情報と結びつける場合、IDを改ざんされても、機密データが見れないようにできている必要があります。 順序性 採番した順にデータをソートする必要がある場合は、IDがソートキーとして使えないといけません。 それぞれについて各生成手段を評価します。 ID生成の手段 データベースの採番テーブル 採番用のテーブルを作り、そこで番号をUPDATEしながら取得していくやりかたです。古い

    ID生成大全 - Qiita
  • アルゴリズムの勉強のしかた - きしだのHatena

    この記事で、アルゴリズムの勉強はアルゴリズムカタログを覚えることじゃないよということを書きました。 プログラムの理論とはなにか アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。 Twitterでアルゴリズムの勉強とはなにかと尋ねられて、「アルゴリズムの基的なパターンを知って、それらの性質の分析のしかたをしって、いろいろなアルゴリズムでどのように応用されているか知って、自分が組むアルゴリズムの性質を判断できるようになることだと思います。 」と答えたのですが、じゃあ実際どういうで勉強すればいいか、ぼくの知ってるからまとめてみました。

    アルゴリズムの勉強のしかた - きしだのHatena
  • GPUとセルオートマトンで経路探索問題を解いてみる | POSTD

    前回は、グラフィックカード上だけで コンウェイのライフゲームを実行するアイデアを説明しました 。このアイデアは、3つ以上の状態を有するオートマトンを含め、 どのような セルオートマトンにも当てはめることができます。今回の投稿では、二次元グリッドの 最短経路問題 をGPUだけで解決するのに、このアイデアを活用してみたいと思います。CPUによる従来の検索と比べても、その速さは遜色ありません。 JavaScript側の状態は基的に以前と同様なので(2つのテクスチャと、それらを繋いでオートマトンを次のステップに進めるフラグメントシェーダ)、ここでは説明は割愛します。変更したのは次の2点、(オートマトンの全ての状態を表現する)セルの状態のエンコーディングと(新しいルールをプログラムする)フラグメントシェーダです。 オンラインデモ ( ソース ) デバッグや実験のために使ったセルオートマトンの純粋な

    GPUとセルオートマトンで経路探索問題を解いてみる | POSTD
  • パーリンノイズを理解する | POSTD

    この記事の目的はKen Perlinの改良パーリンノイズを分かりやすく分析し、お伝えすることです。記事内のコードはC#で書かれており、自由にご利用いただけます。最終形のみを見たい方は、こちらから最終的なソースをご確認ください。 パーリンノイズは手続き的なコンテンツ生成によく使われる、非常に強力なアルゴリズムです。ゲームや、映画などの視覚媒体に特に有用です。パーリンノイズの開発者であるKen Perlinは、この最初の実装でアカデミー賞を受賞しました。彼が2002年に発表した改良パーリンノイズについて、私はこの記事で掘り下げていきます。パーリンノイズは、ゲーム開発においては、波形の類や、起伏のある素材、テクスチャなどに有用です。例えば手続き型の地形(Minecraftのような地形はパーリンノイズで生成できます)、炎のエフェクト、水、雲などにも使えます。これらのエフェクトのほとんどが2次元、3

    パーリンノイズを理解する | POSTD
  • Quick-sort with Hungarian (Küküllőmenti legényes) folk dance

    Created at Sapientia University, Tirgu Mures (Marosvásárhely), Romania. Directed by Kátai Zoltán and Tóth László. In cooperation with "Maros Művészegyüttes", Tirgu Mures (Marosvásárhely), Romania. Choreographer: Füzesi Albert. Video: Lőrinc Lajos, Körmöcki Zoltán. Supported by "Szülőföld Alap", MITIS (NGO) and evoline company. Click the link below to watch this visualization included in the

    Quick-sort with Hungarian (Küküllőmenti legényes) folk dance
  • オーダーについて知っておくべき5つのこと - わさっきhb

    研究室のゼミ発表で,「オーダーのことはよく分かっていませんが…」という前置きで計算量の見積もりをしているものを,昨年,今年と見かけました. この日記が役に立つか,余計な御世話になるか分かっていませんが,ここに整理を試みてみました. 1. ビッグ・オー記法 「アルゴリズムの計算量をオーダーで表してみなさい」と指示されたときのオーダーは, 注文,発注という意味でもなく, 順番*1,順序,秩序という意味でもなく, 「百万のオーダー」*2というような使い方でもなく, 数学の位数という意味でもなく, ビッグ・オー記法,あるいはwikipedia:ランダウの記号を用いて表すものを言います. 2. 一番次数の高いもの以外,それと係数は無視 ビッグ・オー記法では,基的に,一つの文字に関するできるだけ簡単な数式に,「O( )」をかぶせます.このとき, 複数の項の足し算なら,次数の最も高いものだけを残し,他

    オーダーについて知っておくべき5つのこと - わさっきhb
  • ランダウの記号 - Wikipedia

    スターリングの公式はランダウの記号を用いてと書くこともできる。 ランダウの記号(ランダウのきごう、英: Landau symbol)は、主に関数の極限における漸近的な挙動を比較するときに用いられる記法である。 ランダウの漸近記法 (asymptotic notation)、ランダウ記法 (Landau notation) あるいは主要な記号として O (数字の0ではない)を用いることから(バッハマン-ランダウの)O-記法 (Bachmann-Landau O-notation[1])、ランダウのオミクロンなどともいう。 記号 O はドイツ語のOrdnungの頭字にちなむ[2]。 なおここでいうランダウはエトムント・ランダウの事であり、『理論物理学教程』の著者であるレフ・ランダウとは別人である。 ランダウの記号は数学や計算機科学をはじめとした様々な分野で用いられる。 概要[編集] ランダウの

    ランダウの記号 - Wikipedia
  • 1