最長しりとり問題とその解法
品野 勇治，乾 伸雄…lllll…ll……ll‖＝＝＝‖＝川…lll……ll……l…‖‖‖＝‖‖＝＝‖州…l……ll‖＝‖‖‖‖‖‖＝‖‖＝＝‖‖‖‖‖‖＝‖‖‖‖＝‖＝州…ll……l‖＝‖‖＝m＝‖‖＝‖‖‖‖‖‖‖‖＝‖＝‖‖‖＝‖‖＝＝‖‖＝‖‖‖‖‖‖＝‖‖＝＝‖‖＝‖‖＝‖＝‖‖‖‖‖‖‖‖＝‖‖‖州

最長しりとり問題と呼ぶことにします．ただし，テレ1．はじめにビ番組で紹介された問題よりも少し問題を一般化し，本稿では，最長しりとり問題および文字数最大しり

任意の単語から開始して，繋ぐ単語がなくなった時点とり問題の解法，さらに，それらの数値実験についてで終了する最も長いしりとりを作る問題とします．ま

紹介します．本稿の内容は『OR研究の最前線』ではた，長さの定義を，しりとりに含まれる単語の文字数なく，ORを研究している方々にとってはオーソドッとした問題を文字数最大しりとり問題と呼ぶことにしクスな，最適解を求める解法の適用例です．そのため，ます．

解法そのものに目新しさはないと思います．最長しり

最長しりとり問題で求めたいものは，最大の単語数とり問題は，とても分かりやすい問題で，かつ，「トを持つしりとりです．ただし，広辞苑規模の辞書の場リビアの泉」という視聴率の高いテレビ番組で取り上合，名詞だけを取り出しても15万語以上の単語があげられ，広く知られるようになりました．そして，どり，単純な列挙では現実的な時間内に最通解が得られこにでもあるPCとフリーソフトウエアの利開により，ません．最長しりとり問題は，与えられた条件を満足実際に数十秒〜数分程度で最適解が得られることから，するような組合せ集合の中から，目的とする関数（目解法の面白さを伝えやすい題材と言えます．ですから，的関数）値を最大，あるいは，最小にする，ORの分研究分野を紹介するには良い題材かもしれません．

野ではよく知られた組合せ最適化問題です．そこで，『OR研究の最前線』の記事としては，期待を裏切る最適解を求めるための道具である分枝限定法［1，2］をかもしれませんが，楽しんでいただければ幸いです．

通用します．

テレビ番組では，「広辞苑に載っている言葉を使って作ることができる最も長いしりとり」を求めるという内容で紹介されました．この際のしりとりのルール2．最長しりとり問題のモデル化
ここでは，最長しりとり問題に対する，グラフ表現によるモデル化と，ネットワーク表現によるモデル化は，一般なものであり，次の通りでした．

を示します．

●名詞だけを使用

しりとりで単語のつながりをみるためには，各単語●長音は母音で次の単語へ繋ぐの開始文字と終了文字だけが問題であるので，開始文

イコーヒー（こおひい）」⇒「いるか」●「じ」＝「ぢ」，「ず」＝「づ」は同じ音として扱う

字または終了文字になる文字集合をⅤとおきます．

●例えば，「橋（はし）」＝「筈（はし）」は同じ単語

ここでは，文字を数字に対応づけて表現し，文字数乃の集合をⅤ＝（1，2，…，犯）と表します．有向辺の集合として扱い，使用は1度Aは単語の集合であって，A＝β．1∪β12∪…∪β乃乃と●1度使用した単語は再び使用しない表されます．ここで，βゎは文字〆で始まって，文字

イすいか」⇒「からす」⇒「すいカ」●「しりとり」という単語から始め，単語の語尾にノで終わる単語の集合です．これによって得られる有向グラフを図1（a）に示します．図1（a）において，二項「ん」がついた時点で終了

本稿では，与えられた辞書の単語を使って，最も長点を結ぶ路で，有向辺を一度だけ使うオイラー路が一い（最も単語数の多い）しりとりを一つ求める問題をつのしりとりを表現します．しりとりを構成する部分

しなの ゆうじ，いぬい のぶお

グラフのように，始点と終点が異なり，それ自身がオ

東京農工大学大学院共生科学技術研究部

イラー路となるグラフは，準オイラーグラフと呼ばれ〒184−8588小金井市中町2−24−16ます．よって，最長しりとり問題は次のようにモデル

2005年3月号© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

（37）1丁5（a）単語が杖に対応する場合∫より出る，および〜に入る有向辺の容量1，その他の有向辺の容量は辞書中の単語数で決定される．
図2 補助ネットワークによるグラフ表現です．さらに，補助ネットワークⅣ′は，項点5から〃のすべての頂点へ，およぴⅣのすべての頂点から頂点′へ，容量1の有向辺を加えて構成します．補助（b）単語数が枝に対応する場合

ネットワーク〃′上で求まる頂点sから頂点′への最図1 しりとりのモデル

長しりとりの長さは，［本来の長さ＋2］ですが，最終的に解が求まった後に，しりとりの長さを一2すれば済むので，途中の議論では−2を省略します．

化されます．

最長しりとり問題のグラフ表現によるモデル
有向グラフC＝（Ⅴ，A）の準オイラー部分グラフ（Semi−EulerianSubgraph）の中で有向辺の数がこの補助ネットワークにおいて一つのしりとりが構成されるためには，次の条件が満たされなければなりません．

フローとしての条件 頂点s，〜を除き，各項点に入最大となるものを見つける問題．

るフロー量と出るフロー量が等しい．頂点ざでは出るしりとりの長さだけに着日すると，単語の違いは問題ではなく，二つの文字を結ぶ単語の数だけを扱えば十分です．このため，文字fから文字ノへの有向辺のフロー量が1，項点Jでは入るフロー量が1である．
解が連結グラフとなるための条件 フロー量が正の有向辺により誘導される部分グラフが連結である．

集βゎに含まれる有向辺を一つの有向辺αむで置き換

フローとしての条件の記述は容易ですが，連結グラえてできる有向辺の集合A′＝（の1，の2，…，α〃乃）と，単フとなるための条件は，頂点数に対して指数本の制約語数ん＝lβゎlの集合F＝（ん，ム2，…，ん）を用いたネ式が必要となります．そこで，フローとしての条件だ

ットワークを考えます．ここで，んは有向辺恥の容けを制約とする緩和問題から開始する分枝限定法を構量と考えます．このネットワークの例を図1（b）に示し成します．

ます．このネットワークにおいて，最長しりとり問題

3．分枝限定法による解法は次のようにモデル化されます．
最長しりとり問題のネットワーク表現によるモデ

しりとり中の開始文字オ，終了文字ノの単語の出現

ル

回数を示す変数Jおを用いて，まず，フローとしてのネットワークⅣ＝（G＝（Ⅴ，A′），F）において，任条件だけを考慮し，各有向辺に流れるフロー量の総和意の二項点間を流れるフローの中で，各有向辺をを最大化する緩和問題（RP。）を考えます．

流れるフロー量の総和を最大化する問題．
本稿では，このネットワーク表現に基づいた解法を（RPo）最大化 為＝f。yU｛扁∈嘲り∬ゎ
条件 ∑J扇＝1，説明します．まず，任意の二項点間のフローを考える
代わりに，図2に示すような補助ネットワークを作り，補肋ネットワークⅣ′上でのぶ−オフローを考えます．

補助ネットワークⅣ は，ネットワークⅣに，スーパー・ソース5とスーパー・シンク′を付加したもの
1丁6（38）ノ∈y∑∬お−∑轟＝0，∀g∈Ⅴ，ノ∈l■

ノ∈l■∑h㍑＝1，J∈rO≦∬む≦ん∀オ∈Ⅴ，∀ノ∈Ⅴ，
0≦∬む≦1，∀ノ∈Ⅴ，オペレーションズ・リサーチ© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

0≦J力≦1，∀ノ∈V．
問題（RP。）は，最長しりとり問題の緩和問題となっているので，その目的関数値為は最長しりとり問
題の上界値を与えます．問題（RP。）の制約条件は，よく知られた整数定理の成り立つ制約条件であi），各んが整数なので，問題（RP。）の最適基底解∬ヱンは整数解として求まります．よって，仮に，（RP。）の解
図3 分枝操作による追加条件の例

Jお＞0の有向辺により誘導される部分グラフが連結である場合には，最長しりとり問題は解けたことになり∑JJf＝1， ノ∈rます．
そこで，（RP。）の解エゎ＞0の有向辺で誘導される∑J〜J≧1，／＝0，…，々−1，部分グラフが，複数の連結成分に分かれた場合につし、／こl ．＊／三l′lr′＊て考えます．（RP。）の制約条件より，頂点5と頂点0≦Jゎ≦ん∀∠∈V，∀ノ∈V，′の両方を含む連結成分が必ず存在します．いま，S，0≦Jむ≦1，∀ノ∈レ，′を含む連結成分の頂点集合をlゲとし，最長しりと0≦JJf≦1，∀ノ∈V，り問題の許容解集合を二つに分割（分枝操作）する次J七∈Z，∀オ∈VU（∫），の二つの子問題を定義します．

∀ノ∈レ∪（け子問題1頂点g∈1甘から頂点ノ∈Ⅴ＼tゲへの単ここで，lゲは，問題（RP々＿1）を解いて得られた最適語の遷移が少なくとも一つはある最長しりとり問題．

解における，頂点∫，Jを含む連結成分の頂点集合です．

子問題2 頂点〜∈l甘から頂点ノ∈レ＼l菅への単（RP々）の整数条件を取り除くと，基底解の整数性は語の遷移は一つもない最長しりとり問題．
この二つの子問題の最長しりとりのうち，長し一方が元の最長しりとり問題の最適解となります．

子問題2は，（RP。）の頂点集合VU†∫，りを佑＊に制限した問題を解くことに相当します．よって，新保証されませんので，（RP々）を整数計画問題として解く必要があります．このように，ここで提案している
分杖限定法では，整数計画問題を緩和問題とし，親問題にさらに制約式を加えて解し−ています．分枝限定法
によるアルゴリズムを次に示します．

たな問題を解くことなく，（RP。）の解から，∬iJ，∀〆

Algorithm Making LongestShiritori∈杭＊，∀ノ∈1ゲを取り出せばしりとりを構成できま

begin

す．このときの目的関数値ぶは，々：＝0；

ぷ＝∑′三l；誉，ノ∈lて）＊エヱJ

z＊：＝0；（z＊：暫定値）として求まります．ぷは，許容解の目的関数値なの（∬＊へ暫定解を保存する）

で，最適値の下界値となります．

while true do

子問題1に関しては，「頂点g∈t甘から頂点ノ∈

begin

レ＼1ゲへの単語の遷移が少なくとも一つはある」と（RP々）を解く；

いう条件

if（RPh）に実行可能解がなし一thengotol；∑に廿ノミいti誉∬ゎ≧1を（RP。）に加えた（RPl）を考えます（例として，if（RP々）の解で∬ゎ＞0の有向辺で図3を参照）．（RPl）を解き，同様の分枝操作を行い構成されるグラフは連結グラフthenます．以上を再帰的に繰り返し，アルゴリズムを構成

begin

します．々（≧1）回目の再帰で解く問題（RP々）は，

if z＊＜z々then

次のようになります．

begin（RP々）最大化 z々＝∑ Jゎ

Z＊：＝Z々；エー∈ドリ15），ノ∈yUlりz烏を導いた解を∬＊へ保存する：

条件 ∑掬＝1， ノ∈rend；∑ごり一∑Jノヱ＝0，∀〆∈レ，ノ∈リ

ノ∈むgotol；

2005年3f】号（39）1TT© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

∑」班＝1，end

ノ∈l′′

1≦々≦ん

else

0≦こ蕗≦1，∀ダ∈Ⅴ，∀ノ∈V，

begin

1≦々≦ん，ifzh＜z＊then0≦鵡≦1，∀ノ∈Ⅴ，1≦々≦ん，

gotol；

0≦∬展≦1，∀ノ∈Ⅴ，1≦々≦ん．

if z＊＜羞then

この緩和問題（RP。）の変数の数は，辞書にある総単begin語数と等しくなります．もし，辞書に10万語〜20万Z＊：＝Z烏； ′z去を導いた解を∬＊へ保存する；

語くらいの単語があったとしても，現在の線形計画問
題ソルバであれば，（RP。）は比較的短時間に解ける

end；
1芳を抽出し，新しい制約条件を追加して，（RP打1）を作成する；と思われます．最長しりとり問題と同様に，最初の緩和問題（RP。）では整数基底解が得られますが，以降の緩和問題においては，最長しりとり問題と同様の制々：＝々＋1；

約式が追加されるため，エぴに対して0−1条件を追加

end

した整数計画問題を解く必要があります．

end

ここでは，変数の数を減らすために，文字ダから始l：∬＊よりしりとりを構成する

まり文字ノで終わる単語長／の単語の数を一弘 文字オ（しりとり長は，Z＊一2）から始まり文字ノで終わる最長の単語の単語長を⊥ゎ

end；
ネットワーク表現により求まるフロー量エ烏の値は，グラフ表現によるモデルで考えると，最長しりとりを構成するために使う文字才から文字ノヘの有向辺の数を示します．そこで，この∬ゎの値によりグラフを構成すれば，準オイラーグラフが構成できます．そこで，まず，構成された準オイラーグラフから，閉路を含まないS一′路が抽出できるまで，閉路を取り除き記録しとし，辞書に対する前処理としてこれらの値を求めることにします．すると，文字才から始まり文字ノで終わる単語長Jの単語をしりとりで使う回数を克として，最長しりとり問題と同様の解法が構成できます．
このとき，最初の緩和問題（RP。）は，次のようになります．

（RPo）最大化祈′・∈畑∈t′∪｛り1≦／≦⊥上′ておきます．次に，閉路を含まないS−J路を見つけた

条件 ∑ 二ね＝1，ら，記録しておいた閉路を適当に加えてゆくことで，ノ∈t′1≦／≦上側最長しりとりが構成できます．

4．文字数最大しりとり問題．

∑ 二島−ノ∈レ1≦／≦⊥り1≦／く⊥ノ．

∑ ∬ム＝1，ノ∈レ
1≦／≦上ノ′′

次に，文字数最大しりとり問題の解法について説明

0≦Jム≦鳥∀オ∈Ⅴ，∀ノ∈V，します．各単語の文字数が必要となるので，文字ダで1≦／≦⊥ゎ・，

始まり文字ノで終わる単語に適当に順序付けします．

0≦∬も≦1，∀ノ∈V，文字〆で始まり文字ノで終わる々番目の単語の文字数

1≦J≦⊥むを定数c告とし，その単語をしりとりとして使うかど

0≦JJf≦1，∀ノ∈V，うかを示す0−1変数需を用し−れば，最長しりとり問
題の場合と同様の解法が構成できます．このとき，最初の緩和問題（RP。）は，次のようになります．
（RP。）最大化 為＝∑J∈l′∪い†．ノ∈l ∪〈り
1≦ん≦んノ∈l′の緩和問題（RP。）では整数基底解が得られます．しかし，それ以降の緩和問題においては，最長しりとり数としての条件を追加した整数計画問題を解く必要が1≦ん≦ん∑J琉−あります．
．

ノ∈tr

この場合もやはり，最長しりとり問題と同様に，最初問題と同様の制約式が追加されるため，∬いこ整数変条件 ∑ 鵡＝1，

1≦々≦んc昌J51≦／≦⊥Jf．

1≦ん≦ん

オペレーションズ・リサーチ

1丁8（40）© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

表1各問題とモデルにおける有向辺数（変数の数）

5．数値実験結果
解法をC言語により実装しました．実装は，Win−

最長文字数最大

しりとり問題

しりとり問題dows XP上のCygwin（ver．2．218）でgcc（ver．
3．2）を用い，整数計画法のソルバとして，GNU変数の種類GLPK（ver．4．2）を使用しました．実験に使用した

変数の数

PCは，Xeon2．8GHz，DualProcesser，2GB Mem・整数変数 0−1変数 整数変数定式化での4，314192，823 23，206て，最長しりとり問題を解きました．その際に，しりoryです．
テレビ番組で紹介された際には，最新の辞書を使いとりが終了する文字は，必ずしも「ん」とは限らないたし−ということで，広辞苑第5版を使用しました．そので終了文字も指定して，すべての組合せについて解の際，冒頭に述べたように名詞のみを抽出したり同じいています．

音の単語を一つにするなどの条件を満たす辞書を作成

開始文字を変えた場合に，最も長い最長しりとりがしました．これらの処理を施した結果，辞書の総単語作られた開始文字は，「あ」，「ほ」，「ひ」，「は」，数は154，150語で，構成された最長しりとりの単語数「ペ」，「へ」でした．つまり，これらの文字で始まるは75，775語でした．このとき，緩和問題（RP。）を単語から開始したしりとりが最長で，その良さは解いて，連結なグラフが得られました．つまり，分杖86，796でした．また，そのときの終了文字は，すべ限定法は最初の問題の緩和問題（線形計画問題）を解て「ん」でした．最良しりとりが，最も短くなるのはいただけで終了したわけです．辞書から有向グラフを「ん」から始めた場合で（この実験は，機械的に単語構成すると，頂点数69に対して，有向辺数はを抽出したので，品詞の指定されていない「ん」「ん154，150という頂点間に多重有向辺のあるグラフとなとす」が梓書データに含まれていました．しりとりとります．よって，可能な限り有向辺を使う準オイラー

しては適当ではありませんが，ご容赦下さい），その部分グラフを求めていることを考えると，直感的には長さは86，787でした．また，この場合の終了文字は，部分グラフは連結グラフとして得られるように思えま

先の開始文字と同じ「あ」，「ほ」，「ひ」，「は」，「ペ」，す．しかし，連結グラフが構成されるかどうかは実行「へ」でした．しりとりを開始する文字を変えたとししてみないと確認できないことなので，分枝限定法がても，最長しりとりの長さには9しか違いがありませ最も効果的に機能した良い例と考えられます．

ん．このことから，グラフ表現のモデルで考えると，本節では，広辞苑第4版を使用して，最長しりとりいずれの開始文字から構成された最適解においても共関越，文字数最大しりとり問題に対するいくつかの実通する，極大なオイラー閉路が構成されていると思わ験結果を示します．実験で使用するデータは，テレビれます．

番組のものとは異なり広辞苑のCD−ROMから機械的分杖限定法によるアルゴリズムの実行時閃は，平均に取り出して処理しました．そのため，基本的には名1．32秒で，分散に関しては誤差の範囲でした．分散

詞ですが，品詞が指定されていない単語や，1文字のが′J、さいのは，し、ずれも最初の緩和問題（RP。）にお単語も含まれています．また，同じ音の単語が複数存ける線形計両問題を解くだけで，分杖することなく最在し，拗音などの処理も異なります．その結果，辞書適解を得ているためです．さらに詳細な数値実験結果の総単語数は192，687語で，補肋ネットワーク〃′のに関しては，文献［3］をご参照■Fさい．

頂点数は，S，′頂一キを除いて，68頂点です．補肋ネッ

5．2 文字数最大しりとり問題

トワークⅣ′の有向辺の数（定式化時の変数の数）は，文字数最大しi）とり問題は，緩和問題の変数の数が表1のように扱う問題とモデル化により異なります．

最長しりとり問題と比較して，かなり人きくなります．

表1に示された変数の数は，∫から各頂点への有向辺

特に，0−1変数による定式化では192，823変数の問題と各項一真から／への有向辺に対応する変数の数（68ですが，それでも，3，201秒（試行は1回）で最適解十68＝136）を含んでいます．これは実際に整数計画が得られました．こちらも，最初の綬和問題（線形計問題を解く際の変数の数を示すためです．

画問題）を解くことで連結グラフが得られ，ほぼ線形

5．1最長しりとり問題

計画問題を一つ解いた時間です．参考までに，広辞苑

数値実験としては，可能な開始文字をすべて指定しに掲載されている単語をひらがな試みにした際，1単

2005年3什与J一（41）1丁9© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.

語で最も長い

単語長は29，得られたしりとり長はを利用することで現実的な時間内で解ける可能性は高83，901，そのしりとりで構成される文字数は436，106いと思われます．解法の性質上うまく機能する場合もでした．これを，整数計画問題として定式化した場合ありますし，整数計画問題ソルバが強力になっているは23，206変数となるので，最適値は当然同じですが，ことを考えると，緩和問題として整数計画問題を利用実行時間は約56秒でした．

することも，試みてみる佃値があると思われます．

辞書から構成されるグラフ上で，各項点間の有向辺最後に，本稿の内容の一部に関しては他分野の方々の数が半分ずつ減るように単語数を減らし，再帰的に向けのプレゼンテーション［5］や記事［6］もありますの辞書群を構成しました．その辞書群に対して，数値実でご覧いただき，もしよろしかったら研究普及活動の験を行うと，最初の緩和問題（RP。）では解が連結グ題材としてご利用いただければと思います．

ラフとして求まらない場合もありました．しかし，緩和問題である整数計画問題（RPた）を繰り返し解いた

謝辞 原稿執筆に当たり，兵庫県立大学の藤江哲也

回数は，行った数値実験の範囲では，最大でも217回氏に原稿を読んでいただき，有意義なコメントをいたでした．GLPKの整数計画問題ソルバは，双対単体だいたことに感謝いたします．

法をベースにした単純な分枝限定法による実装です．
参考文献

本稿で示した分枝限定法の実装は，最初の緩和問題（RP。）では整数基底解が得られるので，それ以降の制約条件が加えられた子問題では，一般的に行われるように既に得られている基底解から解き直しました．
このとき，実際には，最初の緩和問題（RP。）以外の整数計画問題による緩和問題（RP烏）は極めて短時間で最適解が得られています．

［1］茨木俊秀： 組合せ最適化一分杖限定法を中心として− ，産業図書，1983．
［2］今野浩，鈴木久敏編： 整数計画法と組合せ最適化 ，日科技連出版社，1982．

［3］乾伸雄，品野勇治，鴻池祐輔，小谷善行： 最長しりとり
問題の解法 ，「情報処理学会論文誌：数理モデル化と応用」（TOM），掲載予定．
［4］藤江哲也： 整数計画問題に対する分枝カット法とカ6．おわりにットの理論 ，オペレーションズ・リサーチ，Vol．48，No．
本稿で示したアルゴリズムでは，整数計画問題を緩12，935−940，2003，和問題としています．本誌の過去のコラムに掲載され［5］URI：http：／／al．cs．tuat．ac．jpryshinano／shiritori／

た藤江氏による解説［4］にもあるように，ここ数年の［6］品野勇治： 最短・最長を探す：組合せ最適化，最も長整数計画問題ソルバの性能向上は目覚しいです．仮に，

いしりとりの作り方 ，数学セミナー8月号，日本評論社，ある種の辞書において，緩和問題としての整数計画問

Vol．43，No．8，36−41，2004．

題を何度も解く必要があったとしても，強力なソルバ

オペレーションズ・リサーチ

180（42）© 日本オペレーションズ・リサーチ学会. 無断複写・複製・転載を禁ず.