[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:546

From: "U.Nakamura" <usa garbagecollect.jp>
Date: Sun, 24 Jul 2005 13:50:53 +0900
Subject: [yarv-dev:546] Re: [im]mutable string

こんにちは、なかむら(う)です。

In message "[yarv-dev:545] Re: [im]mutable string"
    on Jul.24,2005 04:23:23, <shiro lava.net> wrote:
> > >    ◎:  C・O(n)、小さめのC
> > >    ○:  C・O(n)、大きめのC
> 
> 間違えました。これはどちらもC・O(1)です。
> 逐次アクセスというのは何らかのイテレータを使って順にアクセスする
> 形態を考えているので、次に読む文字への何らかのポインタを保持している
> ことを前提にしています。var/[mi]で定数項が大きくなるのは、一文字を
> 取り出すのに若干手間がかかるから、くらいの理由です。

なるほど、理解しました。


> > (2) fix/mのN変更、var/mの1変更・N変更がn/aなのはなぜでしょう?
> > mutableなんだから可能だと思うのですが?
> > おそらく×になるのではないかと思いました。
> 
> char str[6] = "abcde"; で、strの "c" を "XXX" にその場で置き換えて
> str = "abXXXde" にすることはできませんよね。(文字列実体の話をしている
> ことを思い出して下さい)
> var/mについてはさらに、1文字変更であってもそれがASCII文字から多バイト
> 文字への変更である可能性があるので一般に不可能です。
> どちらも、実現するためには文字列実体の再アロケートが必要になります。
> それはN変更・再構築というケースで表現しています。

こっちも理解しました。
N変更・再構築と同じだから×だろう、と思ったのですが、そうなっ
てしまうからn/aと表現した、ということですね。


> それと、tre/iの部分文字列取り出しとN変更・再構築は木構造をコピー
> する必要があるのでO(log(n))でしたね。△です。

以上をまとめ直すと、こうですか。
いずれにせよ、mutableにしてもあんまりええことないよ、という話
にはあんまり影響ないですね。

        逐次    添字   連結   1変更   N変更   検索   部分     N変更・再構築

fix/m    ◎     ◎     ×     ◎     n/a     ◎     ×        ×
fix/i    ◎     ◎     ×     n/a    n/a     ◎     ◎        ×
var/m    ○     ×     ×     n/a    n/a     ◎     ×        ×
var/i    ○     ×     ×     n/a    n/a     ◎     ◎        ×
lis/m    ◎     ×     ×     ×     ×      ○     ×        ×
lis/i    ◎     ×     ×     n/a    n/a     ○     ×(*1)    ×
tre/m    ○     △     ◎     △     △      ○     △        △
tre/i    ○     △     ◎     n/a    n/a     ○     △        ◎


操作:

   逐次:各文字への逐次アクセス       添字:文字インデックスによるアクセス
   連結:連結による文字列作成        1変更:1文字のみの(長さを変えない)変更
   N変更:N文字の(長さを変える)変更   検索: 部分文字列検索
   部分:部分文字列の取り出し         
   N変更・再構築: 長さを変える変更を、新たな文字列構築として行う

評価:
   ◎:  C・O(1)、小さめのC
   ○:  C・O(1)、大きめのC
   △:  O(log(n))
   ×:  O(n)
   n/a: 操作そのものが不可能

  (*1) 末尾を共有する文字列の場合◎、その他の場合×



それでは。
-- 
U.Nakamura <usa garbagecollect.jp>


--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       536 2005-07-21 15:05 [ko1 atdot.net       ] [im]mutable string                      
       538 2005-07-21 15:20 ┣[shudo computer.org  ]                                       
       540 2005-07-21 16:26 ┣[maeda-yarv atusi.org]                                       
       541 2005-07-21 18:58 ┗[shiro lava.net      ]                                       
       542 2005-07-22 08:36  ┣[shiro lava.net      ]                                     
       544 2005-07-24 01:24  ┗[usa garbagecollect.j]                                     
       545 2005-07-24 04:23   ┗[shiro lava.net      ]                                   
->     546 2005-07-24 13:50    ┗[usa garbagecollect.j]                                 
       547 2005-07-24 16:54     ┗[matz ruby-lang.org  ]                               
       548 2005-07-24 18:49      ┗[shiro lava.net      ]