prog_0002
の編集
https://k.osask.jp/klog/?prog_0002
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
2012_0001
2013_0001
2013_0002
2013_0003
2014_0001
2015_0001
2016_07
2016_08
2016_09
2016_10
2016_11
2017_01
2017_02
2017_03
2017_04
2017_05
2018_01
2019_01
BracketName
FormattingRules
FrontPage
Help
InterWiki
InterWikiName
InterWikiSandBox
K
KH_SARC_00
KH_dha8
MenuBar
PHP
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RecentDeleted
SandBox
VC_install
WikiEngines
WikiName
WikiWikiWeb
YukiWiki
fdpl_memo0001
fdpl_memo0002
fdpl_memo0003
fdpl_memo0004
fdpl_memo0005
fdpl_memo0006
fdpl_memo0007
fdpl_memo0008
fdpl_memo0009
fdpl_memo0010
gg02_0004
gg02_0005
gg02_0006
gg02_0007
gg02_0008
gg02_0009
https
impressions
memo0001
memo0002
oisix01
osaskology
osaskology0
osecpu_0001
osecpu_0002
p20200229a
p20200303a
p20200310a
p20200321a
p20200401a
p20200730a
p20201230a
p20220628a
p20220701a
populars
prog_0001
prog_0002
prog_0003
prog_0004
prog_0005
* スキップリスト -(by [[K]], 2014.10.14) ** (0) -今回はスキップリスト(SkipLists)の話。 ** (1) -多数のオブジェクトがある状態で、オブジェクトを高速に検索するためにインデックスを張りたい、というニーズは時々ある。そんな時にどんなアルゴリズムを使えばいいだろうかと考えた。 -行いたい操作は、次の通り。 --(a)要素の追加 --(b)要素の削除 --(c)要素をキーで整列させておいた状態において、i番目の要素を得る ---これができれば先頭や末尾も取れる --(d)ある要素を指定した時に、その要素が先頭から何番目であるかを返す --(e)あるキーを指定して、それより小さい要素のうちで最大のものを得る ---つまり、2,4,6,8,10が登録されているときに、key=7で検索すると、6のオブジェクトが得られる。 --(f)あるキーを指定して、それよりも大きい要素のうちで最小のものを得る --(g)2つの要素の間にいくつの要素があるかを返す --(h)2つの要素の間の要素を順番に列挙する --なお、前提条件として、キーの重複はないとする。 -これらをやりたいならスキップリストがよさそうだと思った。 --http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%83%AA%E3%82%B9%E3%83%88 --http://www.dd.iij4u.or.jp/~okuyamak/Information/SkipLists.html -スキップリストなら、(a)~(g)の操作がO(logN)でできそう。(h)は列挙する要素の個数にも比例して、O(MlogN)とかになりそう。これはなかなか優秀である。 --上記のwikipediaのページによれば、B木はさらに優秀らしいが、B木は構成の変化に応じて再構成が必要になり、その分だけプログラムが複雑になる。それが悩ましい。まあ一度本気で作ってライブラリ化してしまえば問題にはならないのかもしれないけれど・・・。 ** (2) -僕は先日これを実装した。高速化を少し意識して冗長な部分もあるけれど、しかしそれでも350行程度だった。なかなか便利だ。 -ちなみにp=1/4くらいがちょうどいいかなと思っている。p=1/2とかだとmaxLevelを2倍くらいにしないといけなくなる。1/4なら、maxLevel=8でも64K個くらいの要素は管理できると思う。 -この実装では、もちろん一般化された比較関数を採用して(参照:[[prog_0001]])、比較関数の第一引数はcustomizeポインタになっている。 ** (3) -乱数を使うというのは、結果が乱数によって左右されてしまうという不安定さがあるものの、しかしアルゴリズムが単純になるというメリットもあって、なかなか考えらせられる。これからは乱数アルゴリズムの時代なんじゃないかとよく思う。 --乱数が主役というのがいいすぎだとしても、確率計算が重要になるという感じは、たぶん合っているような気がする。 ** (4) -JavaにはTreeMapが標準で用意されていてちょっとうらやましい。 * こめんと欄 -実際にベンチマークを書いて少し試したところでは、p=1/2よりもp=1/4のほうが性能は良かった。 -- ''K'' SIZE(10){2014-10-26 (日) 02:15:22} #comment
タイムスタンプを変更しない
* スキップリスト -(by [[K]], 2014.10.14) ** (0) -今回はスキップリスト(SkipLists)の話。 ** (1) -多数のオブジェクトがある状態で、オブジェクトを高速に検索するためにインデックスを張りたい、というニーズは時々ある。そんな時にどんなアルゴリズムを使えばいいだろうかと考えた。 -行いたい操作は、次の通り。 --(a)要素の追加 --(b)要素の削除 --(c)要素をキーで整列させておいた状態において、i番目の要素を得る ---これができれば先頭や末尾も取れる --(d)ある要素を指定した時に、その要素が先頭から何番目であるかを返す --(e)あるキーを指定して、それより小さい要素のうちで最大のものを得る ---つまり、2,4,6,8,10が登録されているときに、key=7で検索すると、6のオブジェクトが得られる。 --(f)あるキーを指定して、それよりも大きい要素のうちで最小のものを得る --(g)2つの要素の間にいくつの要素があるかを返す --(h)2つの要素の間の要素を順番に列挙する --なお、前提条件として、キーの重複はないとする。 -これらをやりたいならスキップリストがよさそうだと思った。 --http://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%83%AA%E3%82%B9%E3%83%88 --http://www.dd.iij4u.or.jp/~okuyamak/Information/SkipLists.html -スキップリストなら、(a)~(g)の操作がO(logN)でできそう。(h)は列挙する要素の個数にも比例して、O(MlogN)とかになりそう。これはなかなか優秀である。 --上記のwikipediaのページによれば、B木はさらに優秀らしいが、B木は構成の変化に応じて再構成が必要になり、その分だけプログラムが複雑になる。それが悩ましい。まあ一度本気で作ってライブラリ化してしまえば問題にはならないのかもしれないけれど・・・。 ** (2) -僕は先日これを実装した。高速化を少し意識して冗長な部分もあるけれど、しかしそれでも350行程度だった。なかなか便利だ。 -ちなみにp=1/4くらいがちょうどいいかなと思っている。p=1/2とかだとmaxLevelを2倍くらいにしないといけなくなる。1/4なら、maxLevel=8でも64K個くらいの要素は管理できると思う。 -この実装では、もちろん一般化された比較関数を採用して(参照:[[prog_0001]])、比較関数の第一引数はcustomizeポインタになっている。 ** (3) -乱数を使うというのは、結果が乱数によって左右されてしまうという不安定さがあるものの、しかしアルゴリズムが単純になるというメリットもあって、なかなか考えらせられる。これからは乱数アルゴリズムの時代なんじゃないかとよく思う。 --乱数が主役というのがいいすぎだとしても、確率計算が重要になるという感じは、たぶん合っているような気がする。 ** (4) -JavaにはTreeMapが標準で用意されていてちょっとうらやましい。 * こめんと欄 -実際にベンチマークを書いて少し試したところでは、p=1/2よりもp=1/4のほうが性能は良かった。 -- ''K'' SIZE(10){2014-10-26 (日) 02:15:22} #comment
テキスト整形のルールを表示する