CCSデータ構造の行削除は難しい!

やあ子供たち。元気にしてたかい?
今日おじさんがやろうとしてたのは、ある巨大な疎行列を有名なCCSデータ構造で持っているところで、ある特定のいくつかの行を削除することだったよ。最近の子供たちは行列計算でCCSとか言ってもどうもピンとこない人が多いみたいだったけど、日本の知的レベルの維持は大丈夫かな?っておじさんは日々心配しているよ。
やってるうちに気付いたのだけど、これが超難しい!行を削除するってことは、難しいんだね。何が難しいかというと、ある行を消してしまった途端、それより下の行にあった要素の行IDは、一つ減っちゃうんだよね。これが何を意味するか子供たちにはわかるだろうか。例えば3行目と7行目を消したいとって思ってたとき、はじめの3行目を消した瞬間、次に消そうと思ってた7行目はもはや7行目ではなくて6行目になってるんだね!しかもCCSのように各要素が行ID、列IDを明示的に持っている場合は、3行目を消したら消す前の4行目以下の要素の行IDは、全てデクリメントしてやる必要があるね。だってそうだろ、3行目を消したらさ、10行目にあったものは9行目になるし、21行目にあった要素は20行目にくることになるんだからさ。
だから消したい行のセットがあったらせめて一番下の行から順次消して行くことだな。先の例で言うとまずは7行目から消すんだ。そうすれば3行目は相変わらず3行目だからね。それでも消した行より下にある要素の行IDを全ていちいちデクリメントする操作は必要だよ。
ていうか作り直しちゃった方がたぶん速いよ。
以上のことはCCSだろうがCRSを持ち出そうが必ず考えなくてはならないよ。
難しいね!
え?おじさんも大人のくせに知的レベル的にまだまだだねってか?こいつは一本とられたな、ま、いいか!じゃっ、おやすみー!