タグ

Algorithmとqueueに関するmanabouのブックマーク (6)

  • Sim Queue in Java (part 1/2)

  • 高速なキューを作る話(前編) - Qiita

    私が以前Haskellで作成した(割と自己満足な)kazura-queueという比較的高速なキューのライブラリがあります。 このライブラリを作るときに考えたアレコレを書いてみたいと思います。 前提 ここでいうキューって何? データ構造としてのキュー(Sequenceみたいな)や分散処理用のキュー?(RabbitMQみたいな)ではなく、並行処理のためにスレッド間の部品として使うようなキュー(Chan(やTQueueやTChan)みたいな)を意図しています。 ここではChanが持っているキューとしての性質をざっと書き出してみましょう。 キューに入るデータの型は任意 Chan aという型で表現できる範囲で好きなデータを入れることができる。 FIFO キューなのだから当たり前といえば当たり前かもしれませんが一応。 スレッドセーフ 複数のスレッドが同時に書き込もうとしても問題が起きない。1 複数のス

    高速なキューを作る話(前編) - Qiita
  • セグメント木をあきらめた人のための平方分割 - くじらにっき++

    この記事はCompetitive Programming Advent Calendar 2016(その2)の12月15日の記事です。 www.adventar.org はじめに 基事項 1点に対する変更クエリ・区間に対する質問クエリ Range Sum Query Range Minimum Query 区間に対する変更クエリ・1点に対する質問クエリ Range Add Query Range Update Query 区間に対する変更クエリ・区間に対する質問クエリ RSQ and RAQ RMQ and RUQ 応用例 Flipping Parentheses セグメントツリーにチャレンジしたくなったら 謝辞 はじめに 私はRMQのような典型的なセグメント木までは比較的容易に実装できるのですが,それよりも難しいクエリに対応したセグメント木を書くのは難しく感じています。とはいえ「区間に

    セグメント木をあきらめた人のための平方分割 - くじらにっき++
  • Let's learn and try double-ended priority queue with Perl 6 - Qiita

    こんにちは、Perl 6アドベントカレンダーの9日目の投稿になります。 今日は、拙作Algorithm::MinMaxHeapの紹介をしたいと思います。 Introduction Algorithm::MinMaxHeap はdouble-ended priority queueの実装です。[0] 一つの木構造の中に、降順と昇順の2種類のヒープが同時に入っているという、ちょっとおもしろいデータ構造をしています。 もう少し正確な言葉で言い換えると、これはノードがMin-Maxオーダーになっている木です: 偶数段目(図のMin level)にあるノードは、同じ偶数段目にある子のノードと値が同じかそれよりも小さくなっています。 奇数段目(図のMax level)にあるノードは、同じ奇数段目にある子のノードと値が同じかそれよりも大きくなっています。 MinMaxHeap Internals 代表的

    Let's learn and try double-ended priority queue with Perl 6 - Qiita
  • Stackを使ってQueueを作る - くまメモ

    有名な話かと思ったら意外と知られていなかったのでメモ。 FILOを使ってFIFOを作るとも言います。StackでQueue作れてもQueueでStackを作る方法が思いつかないので誰か教えて下さい。もしくはこういう学問があったら紹介して頂けると嬉しいです。 簡単な説明としては、2つのStackを用意して、enqueueするときには1つ目にpush()し、dequeueするときには2つ目からpop()するだけ。 ただし2つ目のStackが空の場合は1つ目のスタックが空になるまで2つ目のスタックに移し替える。 template<typename T> class MyQueue { std::stack<T> in, out; MyQueue(){} void enqueue(const T& v) { in.push(v); } T dequeue() { if (out.empty())

    Stackを使ってQueueを作る - くまメモ
  • なぜ Haskell ではキューが軽んじられているか? - あどけない話

    Haskell ではキューが欲しくなったら Data.Sequence を使えと言われる。Seq は両端キューだし、シーケンスとして使えば、連結(><)や分割(splitAt)が、ならし計算量で O(log N) という優れものである。しかし、内部がfinger treeなのでコードが複雑なのと、計算量が「ならし」なところが玉に傷である。 もっと単純で、最悪計算量を保証する(両端でない)キューが標準で提供されてもいい気がする。その候補には、リアルタイムキューがある。どうして標準でキューが提供されないのだろう? 僕なりの答えは「需要がない」だ。 問題を解くときにスタックはよく使うが、キューが必要な問題はそんなに思いつかない。僕はネットワーク屋なので、もちろんルータにはキューが必要なことは知っているが、それ以外で有名どころと言えば幅優先探索ぐらいだ。 幅優先探索 でも、Haskellではキュー

    なぜ Haskell ではキューが軽んじられているか? - あどけない話
  • 1