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

yarv-dev:545

From: Shiro Kawai <shiro lava.net>
Date: Sat, 23 Jul 2005 09:23:23 -1000 (HST)
Subject: [yarv-dev:545] Re: [im]mutable string

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

> >    ◎:  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変更・再構築というケースで表現しています。

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

--shiro




--
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      ]