Professional Documents
Culture Documents
1
اﻓﺮاز ﭼﻨﺪﺿﻠﻌﯽ
در اﯾﻦ ﻓﺼﻞ اﻧﻮاع دﯾﮕﺮ اﻓﺮاز ﻫﺎي ﭼﻨﺪﺿﻠﻌﯽ را ﺑﯿﺎن ﻣﯽ ﮐﻨﯿﻢ ،ﻧﻈﯿﺮ اﻓﺮاز ﺑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا ،اﻓﺮاز ذوزﻧﻘﻪ اي ،اﻓﺮاز ﺑﻪ
ﮐﻮه ﻫﺎي ﯾﮑﻨﻮا و ﻧﯿﺰ اﻓﺮاز ﺑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﻣﺤﺪب .دراﯾﻦ ﻓﺼﻞ ﻣﯽ ﺧﻮاﻫﯿﻢ اﻟﮕﻮرﯾﺘﻢ ﻣﺜﻠﺚ ﺑﻨﺪي را ﮐﻪ در ﻓﺼﻞ ﮔﺬﺷﺘﻪ ﺑﻪ
آن ﭘﺮداﺧﺘﯿﻢ ،ﺳﺮﻋﺖ ﺑﺨﺸﯿﻢ .ﯾﮑﯽ از ﮐﺎرﺑﺮدﻫﺎي اﻓﺮاز ﻣﺤﺪب در ﺗﺸﺨﯿﺺ ﮐﺎراﮐﺘﺮ اﺳﺖ .ﮐﺎراﮐﺘﺮﻫﺎ ﻣﯽ ﺗﻮاﻧﻨﺪ ﺗﻮﺳﻂ ﭼﻨﺪﺿﻠﻌﯽ
ﻫﺎ ﻧﻤﺎﯾﺶ داده ﺷﻮﻧﺪ ) ﮔﺎﻫﯽ اﯾﻦ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎ داراي ﺣﻔﺮه ﻫﺴﺘﻨﺪ( و ﺳﭙﺲ ﺑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﻣﺤﺪب اﻓﺮاز ﺷﻮﻧﺪ .ﭘﺲ از آن،
اﯾﻦ ﺳ ﺎﺧﺘﺎر ﺣﺎﺻﻞ ﺑﺎ ﭘﺎﯾﮕﺎه داده اي از ﺷﮑﻞ ﻫﺎ ﻣﻘﺎﯾﺴﻪ ﻣﯽ ﺷﻮد ﺗﺎ اﯾﻨﮑﻪ ﮐﺎراﮐﺘﺮ ﻣﻮرد ﻧﻈﺮ ﺗﺸﺨﯿﺺ داده ﺷﻮد ) Fengو
،Pavlidisﺳﺎل .(1975ﺑﻪ ﻋﻼوه ﺑﺴﯿﺎري از ﻣﺤﺎﺳﺒﺎت ،روي ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﻣﺤﺪب ﺳﺎده ﺗﺮ اﻧﺠﺎم ﻣﯽ ﺷﻮد ) .ﻣﺤﺎﺳﺒﺎﺗﯽ ﻧﻈﯿﺮ
ﺗﻘﺎﻃﻊ ﺑﺎ ﻣﻮاﻧﻊ ﯾﺎ ﭘﺮﺗﻮﻫﺎي ﻧﻮر ،ﺑﻪ دﺳﺖ آوردن ﻓﺎﺻﻠﻪ از ﯾﮏ ﺧﻂ و ﺗﻌﯿﯿﻦ اﯾﻨﮑﻪ آﯾﺎ ﯾﮏ ﻧﻘﻄﻪ داﺧﻞ اﺳﺖ ( ،ﺑﻨﺎﺑﺮاﯾﻦ ﺑﻬﺘﺮ اﺳﺖ
اﺑﺘﺪا ﺷﮑﻞ ﻫﺎي ﭘﯿﭽﯿﺪه را ﺑﻪ ﻗﻄﻌﻪ ﻫﺎي ﻣﺤﺪب اﻓﺮاز ﮐﺮده و ﺳﭙﺲ ﻣﺤﺎﺳﺒﺎت را روي آن ﻫﺎ اﻧﺠﺎم دﻫﯿﻢ.
.1.2اﻓﺮاز ﯾﮑﻨﻮا
در ﺑﺨﺶ .1.4ﯾﮏ اﻟﮕﻮرﯾﺘﻢ ﻣﺜﻠﺚ ﺑﻨﺪي از ﻣﺮﺗﺒﻪ ي زﻣﺎﻧﯽ ) O(n2اراﺋﻪ ﮐﺮدﯾﻢ .در اداﻣﻪ ﺳﻌﯽ ﻣﯽ ﮐﻨﯿﻢ ﻣﺤﺎﺳﺒﺎت را
ﻫﻮﺷﻤﻨﺪاﻧﻪ ﺗﺮ اﻧﺠﺎم دﻫﯿﻢ ،ﺑﻪ ﻃﻮرﯾﮑﻪ ﻫﺮ ﻗﻄﺮ در زﻣﺎن ﮐﻤﺘﺮ از ﺧﻄﯽ ﭘﯿﺪا ﺷﻮد .اﻟﮕﻮرﯾﺘﻢ ﻫﺎي زﯾﺎدي وﺟﻮد دارﻧﺪ ﮐﻪ در زﻣﺎن
) O(n log nﮐﺎر ﻣﯽ ﮐﻨﻨﺪ و ﺑﻪ ﻃﻮر ﻣﺘﻮﺳﻂ ﺑﺮاي ﻫﺮ ﻗﻄﺮ ﺑﻪ ﻣﯿﺰان ) O(lognﮐﺎر اﻧﺠﺎم ﻣﯽ ﺷﻮد .اﯾﻦ اﻟﮕﻮرﯾﺘﻢ اوﻟﯿﻦ ﺑﺎر
ﺗﻮﺳﻂ Preparata ،Johnson ، Garyو Tarjanدر ﺳﺎل 1987اراﺋﻪ ﺷﺪ .ﻣﻤﮑﻦ اﺳﺖ اﻧﺘﻈﺎر ﺑﺮود اﯾﻦ اﻟﮕﻮرﯾﺘﻢ ﺑﺎ ﯾﺎﻓﺘﻦ ﻫﺮ
ﻗﻄﺮ در زﻣﺎن ) O(log nاز ﻃﺮﯾﻖ ﺟﺴﺘﺠﻮي دودوﯾﯽ ،در زﻣﺎن ) O(n log nﮐﺎر ﮐﻨﺪ ،در ﺻﻮرﺗﯽ ﮐﻪ در ﺣﻘﯿﻘﺖ اﻟﮕﻮرﯾﺘﻢ آن ﻫﺎ
ﺑﻪ اﯾﻦ ﺻﻮرت
ﮐﺎر ﻧﻤﯽ ﮐﻨﺪ .در اﯾﻦ اﻟﮕﻮرﯾﺘﻢ اﺑﺘﺪا ﭼﻨﺪﺿﻠﻌﯽ در زﻣﺎن ) O(nlog nﺑﻪ ﻗﻄﻌﺎت ﺳﺎده ﺗﺮ اﻓﺮاز ﻣﯽ ﺷﻮد و ﺳﭙﺲ اﯾﻦ ﻗﻄﻌﺎت در
زﻣﺎن ﺧﻄﯽ ﻣﺜﻠﺚ ﺑﻨﺪي ﻣﯽ ﺷﻮﻧﺪ .اﯾﻦ ﻗﻄﻌﺎت »ﯾﮑﻨﻮا« ﻧﺎﻣﯿﺪه ﻣﯽ ﺷﻮﻧﺪ و اوﻟﯿﻦ ﺑﺎر ﺗﻮﺳﻂ Leeو Preparataدر ﺳﺎل 1977
ﻣﻌﺮﻓﯽ ﺷﺪ .اﻓﺮاز ﺑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا ﻋﻼوه ﺑﺮ ﻣﺜﻠﺚ ﺑﻨﺪي اﺳﺘﻔﺎده ﻫﺎي دﯾﮕﺮي ﻧﯿﺰ دارد ،ﺑﻨﺎﺑﺮاﯾﻦ ﻣﻄﺎﻟﻌﻪ ي آن ﻫﺎ ﻣﻔﯿﺪ و
ارزﺷﻤﻨﺪ اﺳﺖ.
در اﺑﺘﺪا ﺑﻪ ﺷﺮح ﺧﻼﺻﻪ اي از اﻟﮕﻮرﯾﺘﻢ ﺑﺎ ﻣﺮﺗﺒﻪ زﻣﺎﻧﯽ ) O(n log nﻣﺒﺘﻨﯽ ﺑﺮ اﻓﺮاز ﯾﮑﻨﻮا ﻣﯽ ﭘﺮدازﯾﻢ و در ﺑﺨﺶ 2.3ﺟﺰﺋﯿﺎت
اﻟﮕﻮرﯾﺘﻢ ﺑﺮ اﺳﺎس اﻓﺮاز ﺑﻪ »ﮐﻮه ﻫﺎي ﯾﮑﻨﻮا« را ﺑﯿﺎن ﻣﯽ ﮐﻨﯿﻢ.
اﺑﺘﺪا ﻣﻔﻬﻮم ﯾﮑﻨﻮاﯾﯽ را ﺗﻌﺮﯾﻒ ﻣﯽ ﮐﻨﯿﻢ و ﺳﭙﺲ ﻧﺸﺎن ﻣﯽ دﻫﯿﻢ ﭼﮕﻮﻧﻪ ﻣﯽ ﺗﻮان ﯾﮏ ﭼﻨﺪﺿﻠﻌﯽ ﯾﮑﻨﻮا را در زﻣﺎن ﺧﻄﯽ ﻣﺜﻠﺚ
ﺑﻨﺪي ﮐﺮد و ﻧﯿﺰ در اﻧﺘﻬﺎ ﺑﯿﺎن ﻣﯽ ﮐﻨﯿﻢ ﭼﮕﻮﻧﻪ ﻣﯽ ﺗﻮان ﯾﮏ ﭼﻨﺪﺿﻠﻌﯽ را ﺑﻪ ﻗﻄﻌﺎت ﯾﮑﻨﻮا اﻓﺮاز ﮐﺮد.
1
ﻓﺼﻞ دوم 2.1
زﻧﺠﯿﺮ ﭼﻨﺪﺿﻠﻌﯽ Cﻧﺴﺒﺖ ﺑﻪ ﺧﻂ Lاﮐﯿﺪا ﯾﮑﻨﻮا اﺳﺖ اﮔﺮ ﻫﺮ ﺧﻂ Lﻋﻤﻮد ﺑﺮ Lزﻧﺠﯿﺮ Cرا ﺣﺪاﮐﺜﺮ در ﯾﮏ ﻧﻘﻄﻪ ﻗﻄﻊ
ﺣﺪاﮐﺜﺮ ﯾﮏ ﻣﺆﻟﻔﻪ ي ﯾﺎ ﺗﻬﯽ اﺳﺖ و ﯾﺎ ﻓﻘﻂ ﯾﮏ ﻧﻘﻄﻪ اﺳﺖ( .ﯾﮏ زﻧﺠﯿﺮ ﯾﮑﻨﻮا اﺳﺖ اﮔﺮ ∩ ∩ ﮐﻨﺪ )ﺑﻪ ﻋﺒﺎرت دﯾﮕﺮ
ﻫﻤﺒﻨﺪي دارد :اﺷﺘﺮاك ﺧﻂ Lو زﻧﺠﯿﺮ Cﻣﯽ ﺗﻮاﻧﺪ ﺗﻬﯽ ،ﯾﮏ ﻧﻘﻄﻪ و ﯾﺎ ﯾﮏ ﭘﺎره ﺧﻂ ﺑﺎﺷﺪ .اﯾﻦ زﻧﺠﯿﺮﻫﺎ از اﯾﻦ ﻧﻈﺮ »ﯾﮑﻨﻮا«
ﻫﺴﺘﻨﺪ ﮐﻪ در ﺗﺼﻮﯾﺮ ﭘﯿﻤﺎﯾﺶ زﻧﺠﯿﺮ Cروي ﺧﻂ Lﻫﯿﭻ ﮔﺎه ﺑﺎزﮔﺸﺖ ﺑﻪ ﻋﻘﺐ رخ ﻧﻤﯽ دﻫﺪ.
)ﻣﺮز ﭼﻨﺪﺿﻠﻌﯽ (Pﻗﺎﺑﻞ ﺗﻘﺴﯿﻢ ﺑﻪ دو زﻧﺠﯿﺮ ﭼﻨﺪﺿﻠﻌﯽ Aو B ﭼﻨﺪﺿﻠﻌﯽ Pﻧﺴﺒﺖ ﺑﻪ ﺧﻂ b Lﯾﮑﻨﻮا ﻧﺎﻣﯿﺪه ﻣﯽ ﺷﻮد اﮔﺮ
ﺑﺎﺷﺪ ﺑﻪ ﻃﻮرﯾﮑﻪ ﻫﺮ زﻧﺠﯿﺮ ﻧﺴﺒﺖ ﺑﻪ ﺧﻂ Lﯾﮑﻨﻮا ﺑﺎﺷﺪ .دو زﻧﺠﯿﺮ در اﺑﺘﺪا و اﻧﺘﻬﺎ در ﯾﮏ رأس ﻣﺸﺘﺮك ﻫﺴﺘﻨﺪ .در ﺗﺼﻮﯾﺮ 1.2
ﯾﮏ ﭼﻨﺪﺿﻠﻌﯽ ﯾﮑﻨﻮا ﻧﺴﺒﺖ ﺑﻪ ﺧﻂ ﻗﺎﺋﻢ ﻧﺸﺎن داده ﺷﺪه اﺳﺖ .در اﯾﻦ ﺗﺼﻮﯾﺮ دو زﻧﺠﯿﺮ ﯾﮑﻨﻮا ) A=(v0, …, v15و B=(v15, …,
) v24, v0ﻫﺴﺘﻨﺪ .ﻫﯿﭻ ﯾﮏ از اﯾﻦ دو زﻧﺠﯿﺮ اﮐﯿﺪا ﯾﮑﻨﻮا ﻧﯿﺴﺘﻨﺪ ،زﯾﺮا ﯾﺎل ﻫﺎي v5v6و v21v22اﻓﻘﯽ ﻣﯽ ﺑﺎﺷﻨﺪ .ﺑﺮﺧﯽ از
ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎ ﻧﺴﺒﺖ ﺑﻪ ﭼﻨﺪ ﺧﻂ ﯾﮑﻨﻮا ﻫﺴﺘﻨﺪ و ﺑﺮﺧﯽ دﯾﮕﺮ ﻧﺴﺒﺖ ﺑﻪ ﻫﯿﭻ ﺧﻄﯽ ﯾﮑﻨﻮا ﻧﯿﺴﺘﻨﺪ.
ﺑﺴﯿﺎري از اﻟﮕﻮرﯾﺘﻢ ﻫﺎﯾﯽ ﮐﻪ ﺑﺮاي ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﻣﻌﻤﻮﻟﯽ دﺷﻮار اﺳﺖ ﺑﺮاي ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا ﺳﺎده اﺳﺖ و اﯾﻦ ﺑﻪ دﻟﯿﻞ
وﯾﮋﮔﯽ ﮐﻠﯿﺪي اﯾﻦ ﻧﻮع ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎ اﺳﺖ :رأس ﻫﺎي ﻫﺮ ﯾﮏ از زﻧﺠﯿﺮﻫﺎي ﭼﻨﺪﺿﻠﻌﯽ ﯾﮑﻨﻮا ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺧﻂ ﯾﮑﻨﻮاﯾﯽ ﻣﺮﺗﺐ
ﺷﺪه اﻧﺪ .ﺧﻂ ﯾﮑﻨﻮاﯾﯽ را ﻣﺤﻮر ﻗﺎﺋﻢ در ﻧﻈﺮ ﻣﯽ ﮔﯿﺮﯾﻢ .ﺑﻨﺎﺑﺮاﯾﻦ رأس ﻫﺎي ﭼﻨﺪﺿﻠﻌﯽ ﻣﯽ ﺗﻮاﻧﻨﺪ ﺑﺮ اﺳﺎس ﻣﺆﻟﻔﻪ ي yﺷﺎن در
زﻣﺎن ﺧﻄﯽ ﻣﺮﺗﺐ ﺷﻮﻧﺪ :ﺑﺎﻻﺗﺮﯾﻦ و ﭘﺎﯾﯿﻦ ﺗﺮﯾﻦ رأس را ﭘﯿﺪا ﻣﯽ ﮐﻨﯿﻢ و ﻣﺮز ﭼﻨﺪﺿﻠﻌﯽ را ﺑﻪ دو زﻧﺠﯿﺮ اﻓﺮاز ﻣﯽ ﮐﻨﯿﻢ .دو ﻟﯿﺴﺖ
ﻣﺮﺗﺐ ﺷﺪه از رﺋﻮس ﻣﯽ ﺗﻮاﻧﻨﺪ در زﻣﺎن ﺧﻄﯽ ادﻏﺎم ﺷﻮﻧﺪ و ﯾﮏ ﻟﯿﺴﺖ ﻣﺮﺗﺐ ﺑﺮﺣﺴﺐ yرا ﺗﻮﻟﯿﺪ ﮐﻨﻨﺪ.
2
ﻓﺼﻞ دوم 2.1
ﺗﻌﺮﯾﻒ :زاوﯾﻪ داﺧﻠﯽ ﯾﮏ ﭼﻨﺪﺿﻠﻌﯽ ﯾﮏ رأس اﻧﻌﮑﺎﺳﯽ vاﺳﺖ ﺑﻪ ﮔﻮﻧﻪ اي ﮐﻪ رأس ﻫﺎي ﻣﺠﺎور vﯾﻌﻨﯽ v-و v+ﻫﺮ دو روي
دارد ،ﺑﻨﺎﺑﺮاﯾﻦ ﯾﺎ ﺑﺎﻻي ﯾﺎ ﻫﺮ دو روي ﯾﺎ ﭘﺎﯾﯿﻦ vﺑﺎﺷﻨﺪ .ﺑﻪ ﯾﺎد داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ رأس اﻧﻌﮑﺎﺳﯽ ،زاوﯾﻪ ي داﺧﻠﯽ اﮐﯿﺪا ﺑﺰرﮔﺘﺮ از
رأس ﻫﺎي ﻣﺠﺎور زاوﯾﻪ ي داﺧﻠﯽ ﻧﻤﯽ ﺗﻮاﻧﻨﺪ ﻣﺆﻟﻔﻪ ي yﯾﮑﺴﺎن ﺑﺎ vداﺷﺘﻪ ﺑﺎﺷﻨﺪ .ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﯾﻦ ﻧﮑﺘﻪ در ﺗﺼﻮﯾﺮ (b)2.2رأس
ﻣﯽ ﺑﺎﺷﺪ( زاوﯾﻪ ي داﺧﻠﯽ ﻧﻤﯽ ﺑﺎﺷﻨﺪ. dو ) dﭼﻮن ﮐﻤﺘﺮ از
ﺗﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﯿﺪ ﮐﻪ اﯾﻦ ﻟﻢ ﻧﻤﯽ ﺗﻮاﻧﺪ اﯾﻦ ادﻋﺎ را ﺛﺎﺑﺖ ﮐﻨﺪ ﮐﻪ ﻧﺪاﺷﺘﻦ زاوﯾﻪ ي داﺧﻠﯽ ،دﻟﯿﻞ ﺑﺮ اﮐﯿﺪا ﯾﮑﻨﻮا ﺑﻮدن ﭼﻨﺪﺿﻠﻌﯽ
اﺳﺖ )ﺗﻤﺮﯾﻦ ] .(2.2.3 [2از اﯾﻦ ﻟﻢ در ﺑﺨﺶ 2.2ﺑﺮاي اﻓﺮاز ﭼﻨﺪﺿﻠﻌﯽ ﺑﻪ ﻗﻄﻌﺎت ﯾﮑﻨﻮا اﺳﺘﻔﺎده ﻣﯽ ﮐﻨﯿ ﻢ.
اﺛﺒﺎت :ﻓﺮض ﮐﻨﯿﺪ ﭼﻨﺪﺿﻠﻌﯽ Pﻧﺴﺒﺖ ﺑﻪ ﻣﺤﻮر ﻗﺎﺋﻢ ﯾﮑﻨﻮا ﻧﺒﺎﺷﺪ .در اﯾﻦ ﺻﻮرت ﺑﺎﯾﺪ ﺛﺎﺑﺖ ﮐﻨﯿﻢ Pﺣﺪاﻗﻞ ﯾﮏ زاوﯾﻪ ي داﺧﻠﯽ
دارد.
از آﻧﺠﺎﯾﯿﮑﻪ Pﯾﮑﻨﻮا ﻧﯿﺴﺖ ،ﺣﺪاﻗﻞ ﯾﮏ ﺧﻂ اﻓﻘﯽ ﻣﺎﻧﻨﺪ lوﺟﻮد دارد ﮐﻪ Pرا در ﺑﯿﺶ از ﯾﮏ ﻣﺆﻟﻔﻪ ي ﻫﻤﺒﻨﺪ ﻗﻄﻊ ﻣﯽ ﮐﻨﺪ.
ﻣﯽ ﺗﻮاﻧﯿﻢ lرا ﺑﻪ ﮔﻮﻧﻪ اي اﻧﺘﺨﺎب ﮐﻨﯿﻢ ﮐﻪ ﭼﭗ ﺗﺮﯾﻦ ﻣﺆﻟﻔﻪ ي ﻫﻤﺒﻨﺪ ﯾﮏ ﺧﻂ ﺑﺎﺷﺪ ﻧﻪ ﯾﮏ ﻧﻘﻄﻪ .ﺣﺎل ﻧﻘﻄﻪ ي ﺳﻤﺖ ﭼﭗ
اﯾﻦ ﭘﺎره ﺧﻂ را pو ﻧﻘﻄﻪ ي ﺳﻤﺖ راﺳﺖ آن را qﻣﯽ ﻧﺎﻣﯿﻢ ) pو qدو ﺳﺮ ﭘﺎره ﺧﻂ ﻫﺴﺘﻨﺪ( .ﺑﺎ ﺷﺮوع از ﻧﻘﻄﻪ ي qﻣﺮز
ﭼﻨﺪﺿﻠﻌﯽ Pرا ﭘﯿﻤﺎﯾﺶ ﻣﯽ ﮐﻨﯿﻢ ،ﺑﻪ ﮔﻮﻧﻪ اي ﮐﻪ ﻧﻘﻄﻪ ي pﺳﻤﺖ ﭼﭗ ﻣﺮز واﻗﻊ ﺷﻮد ،ﺑﻪ ﻋﺒﺎرت دﯾﮕﺮ از qﺑﻪ ﺳﻤﺖ ﺑﺎﻻ
ﺣﺮﮐﺖ ﻣﯽ ﮐﻨﯿﻢ .در ﺣﯿﻦ ﭘﯿﻤﺎﯾﺶ ﻣﺮز ،ﻣﺠﺪدا ﺑﻪ ﺧﻂ lﻣﯽ رﺳﯿﻢ .ﻧﻘﻄﻪ ي ﺗﻘﺎﻃﻊ ﻣﺮز ﭼﻨﺪﺿﻠﻌﯽ و lرا rﻣﯽ ﻧﺎﻣﯿﻢ .ﺣﺎل اﮔﺮ
≠ ،ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎﻻﺗﺮﯾﻦ رأﺳﯽ ﮐﻪ در ﭘﯿﻤﺎﯾﺶ از qﺑﻪ rﺑﻪ آن رﺳﯿﺪﯾﻢ ﯾﮏ زاوﯾﻪ ي داﺧﻠﯽ ﺧﻮاﻫﺪ ﺑﻮد و ﻫﻤﺎﻧﻨﺪ ﺗﺼﻮﯾﺮ )،(a
اﺛﺒﺎت ﺗﻤﺎم ﻣﯽ ﺷﻮد.
اﻣﺎ اﮔﺮ r=pﺑﺎﺷﺪ ،ﻫﻤﺎن ﻃﻮر ﮐﻪ در ﺗﺼﻮﯾﺮ ) (bﻣﺸﺎﻫﺪه ﻣﯽ ﮐﻨﯿﺪ ،اﯾﻦ ﺑﺎر ﻣﺮز Pرا ﺑﺎ ﺷﺮوع از qرو ﺑﻪ ﭘﺎﯾﯿﻦ ﭘﯿﻤﺎﯾﺶ ﻣﯽ
ﮐﻨﯿﻢ .ﻫﻤﺎﻧﻨﺪ ﺣﺎﻟﺖ ﻗﺒﻞ ﻣﺮز ﭼﻨﺪﺿﻠﻌﯽ ﺧﻂ lرا در ﻧﻘﻄﻪ اي ﻫﻤﺎﻧﻨﺪ rﻗﻄﻊ ﺧﻮاﻫﺪ ﮐﺮد .در اﯾﻦ ﺣﺎﻟﺖ rﻧﻤﯽ ﺗﻮاﻧﺪ ﻫﻤﺎن p
ﺑﺎﺷﺪ ،ﺑﻪ اﯾﻦ دﻟﯿﻞ ﮐﻪ اﮔﺮ r=pﺑﺎﺷﺪ آﻧﮕﺎه ﺧﻂ lﻣﺮز ﭼﻨﺪﺿﻠﻌﯽ را ﻓﻘﻂ در ﻧﻘﻄﻪ ﻗﻄﻊ ﮐﺮده ﺑﻮده اﺳﺖ ﮐﻪ ﺑﺎ ﻓﺮض ﯾﮑﻨﻮا ﻧﺒﻮدن
Pدر ﺗﻨﺎﻗﺾ اﺳﺖ .ﺑﻨﺎﺑﺮاﯾﻦ ﭘﺎﯾﯿﻦ ﺗﺮﯾﻦ رأس در ﭘﯿﻤﺎﯾﺶ از qﺑﻪ ،rزاوﯾﻪ ي داﺧﻠﯽ ﺧﻮاﻫﺪ ﺑﻮد و ﻟﻢ اﺛﺒﺎت ﻣﯽ ﺷﻮد.
3
ﻓﺼﻞ دوم 2.1
رأس داﺧﻠﯽ
رأس داﺧﻠﯽ
از آﻧﺠﺎﯾﯿﮑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا ﺑﺴﯿﺎر ﻣﺤﺪود ﺷﺪه ﻫﺴﺘﻨﺪ ،ﺑﻪ ﻧﻈﺮ ﻣﯽ رﺳﺪ ﻣﺜﻠﺚ ﺑﻨﺪي آن ﻫﺎ ﻧﯿﺰ ﺑﻪ ﺻﻮرت ﺧﺎﺻﯽ اﻧﺠﺎم
ﺷﻮد ،ﺑﻪ ﮔﻮﻧﻪ اي ﮐﻪ دوﮔﺎن ﻣﺜﻠﺚ ﺑﻨﺪي ﻫﻤﯿﺸﻪ ﯾﮏ ﻣﺴﯿﺮ ﺑﺎﺷﺪ و ﯾﺎ ﻫﺮﻗﻄﺮ دو زﻧﺠﯿﺮ ﻫﻤﻨﻮا را ﺑﻬﻢ ﻣﺘﺼﻞ ﻣﯽ ﮐﻨﺪ .ﺗﺼﻮﯾﺮ 2.1
ﻧﺸﺎن ﻣﯽ دﻫﺪ ﻫﯿﭻ ﯾﮏ از اﯾﻦ دو ﻓﺮﺿﯿﻪ ﺑﺮﻗﺮار ﻧﯿﺴﺖ.
ﺑﺎ وﺟﻮد اﯾﻦ ،اﯾﻦ ﺣﺪس ﮐﻪ اﯾﻦ ﻧﻮع ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎ ﺧﺎص ﻫﺴﺘﻨﺪ و ﺑﺎﯾﺴﺘﯽ ﺳﺎده ﺗﺮ ﻣﺜﻠﺚ ﺑﻨﺪي ﺷﻮﻧﺪ ،درﺳﺖ اﺳﺖ :ﻫﺮ
ﭼﻨﺪﺿﻠﻌﯽ ﯾﮑﻨﻮا )ﮐﻪ ﺟﻬﺖ ﯾﮑﻨﻮاﯾﯽ آن داده ﺷﺪه ﺑﺎﺷﺪ( ﻣﯽ ﺗﻮاﻧﺪ در زﻣﺎن ﺧﻄﯽ ﻣﺜﻠﺚ ﺑﻨﺪي ﺷﻮد.
در اﯾﻨﺠﺎ اﺷﺎره اي ﺑﻪ اﻟﮕﻮرﯾﺘﻢ ﻣﯽ ﮐﻨﯿﻢ .اﺑﺘﺪا رأس ﻫﺎ را از ﺑﺎﻻ ﺑﻪ ﭘﺎﯾﯿﻦ ﻣﺮﺗﺐ ﻣﯽ ﮐﻨﯿﻢ )در زﻣﺎن ﺧﻄﯽ( .ﺳﭙﺲ ﻣﺜﻠﺚ ﻫﺎ را از
ﺑﺎﻻ در ﯾﮏ روش »ﺣﺮﯾﺼﺎﻧﻪ« ﺑﺮش ﻣﯽ دﻫﯿﻢ )در اﯾﻨﺠﺎ ﻟﻐﺖ ﺣﺮﯾﺼﺎﻧﻪ ﺑﻪ اﯾﻦ ﻣﻌﻨﺎ اﺳﺖ ﮐﻪ در ﻫﺮ ﻣﺮﺣﻠﻪ ،اوﻟﯿﻦ ﻣﺜﻠﺚ ﻣﻮﺟﻮد
ﺣﺬف ﻣﯽ ﺷﻮد( .ﺑﻨﺎﺑﺮاﯾﻦ اﻟﮕﻮرﯾﺘﻢ ﺑﻪ اﯾﻦ ﺻﻮرت ﺧﻮاﻫﺪ ﺑﻮد :ﺑﺮاي ﻫﺮ رأس v ،vرا ﺑﻪ ﺗﻤﺎم رأس ﻫﺎي ﺑﺎﻻي آن وﺻﻞ ﮐﻨﯿﺪ ﺑﻪ
ﮔﻮﻧﻪ اي ﮐﻪ آن رأس ﻫﺎ ﺗﻮﺳﻂ ﯾﮏ ﻗﻄﺮ ﺑﺮاي vﻗﺎﺑﻞ رؤﯾﺖ ﺑﺎﺷﻨﺪ و ﺳﭙﺲ ﺑﺨﺶ ﺑﺎﻻﯾﯽ از ﭼﻨﺪﺿﻠﻌﯽ را ﮐﻪ ﺑﺪﯾﻦ ﻃﺮﯾﻖ ﻣﺜﻠﺚ
ﺑﻨﺪي ﺷﺪه ﺣﺬف ﮐﻨﯿﺪ ،اﯾﻦ ﮐﺎر را ﺑﺮاي رأس ﺑﻌﺪي ﭘﺎﯾﯿﻦ vاداﻣﻪ دﻫﯿﺪ.
∈ ( ﺑﻪ زﻧﺠﯿﺮي از رأس ﻫﺎي اﻧﻌﮑﺎﺳﯽ ﺑﺎﻻي آن در زﻧﺠﯿﺮ Bوﺻﻞ ﻣﯽ ﺷﻮد .ﺑﺮاي ﻣﯽ ﺗﻮان ﻧﺸﺎن داد در ﻫﺮ ﺗﮑﺮار ،رأس ) v
ﻣﺜﺎل در ﺗﺼﻮﯾﺮ ، 2.1رأس v16ﺑﻪ رأس ﻫﺎي ) (v14, v13, v12در اوﻟﯿﻦ ﺗﮑﺮار وﺻﻞ ﺷﺪه اﺳﺖ .در ﻧﺘﯿﺠﻪ ﻻزم ﻧﯿﺴﺖ ﺑﺮاي ﻗﻄﺮﻫﺎ
ﻗﺎﺑﻠﯿﺖ دﯾﺪ ﺑﺮرﺳﯽ ﺷﻮد .اﯾﻦ اﻟﮕﻮرﯾﺘﻢ ﻣﯽ ﺗﻮاﻧﺪ ﺑﺎ ﯾﮏ ﭘﺸﺘﻪ ﺑﺮاي ﻧﮕﻬﺪاري زﻧﺠﯿﺮ اﻧﻌﮑﺎﺳﯽ ﺑﺎﻻي رأس اﺟﺮا ﺷﻮد .ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ
زﻣﺎن ﺧﻄﯽ ﻣﺮﺗﺐ ﺳﺎزي و اﯾﻦ ﺳﺎﺧﺘﻤﺎن داده ي ﺳﺎده ،ﮐﻞ اﻟﮕﻮرﯾﺘﻢ در زﻣﺎن ) O(nﻗﺎﺑﻞ اﺟﺮا ﺧﻮاﻫﺪ ﺑﻮد.
.2.2ذوزﻧﻘﻪ ﺑﻨﺪي
ﺑﺎ داﻧﺴﺘﻦ اﯾﻨﮑﻪ ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا ﺑﻪ ﺳﺮﻋﺖ ﻣﺜﻠﺚ ﺑﻨﺪي ﻣﯽ ﺷﻮﻧﺪ ،اﺑﺘﺪا ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎ را ﺑﻪ ﻗﻄﻌﺎت ﯾﮑﻨﻮا اﻓﺮاز ﻣﯽ ﮐﻨﯿﻢ.
اﯾﻦ اﻓﺮاز را ﺑﻪ وﺳﯿﻠﻪ ي ﻧﻮﻋﯽ اﻓﺮاز دﯾﮕﺮ ﺑﻪ ﻧﺎم اﻓﺮاز ذوزﻧﻘﻪ اي اﻧﺠﺎم ﻣﯽ دﻫﯿﻢ .اﯾﻦ ﻧﻮع اﻓﺮاز ﺗﻮﺳﻂ Chazellو Incerpi
4
ﻓﺼﻞ دوم 2.1
) (1989و Fournierو (1984 ) Montunoﺑﻪ ﻋﻨﻮان ﮐﻠﯿﺪي ﺑﺮاي ﻣﺜﻠﺚ ﺑﻨﺪي ﻣﻌﺮﻓﯽ ﺷﺪ .اﯾﻦ اﻓﺮاز ﺑﺎ اﻓﺮاز ﻫﺎﯾﯽ ﮐﻪ ﺗﺎ ﮐﻨﻮن
دﯾﺪﯾﻢ ﻣﺘﻔﺎوت اﺳﺖ ،از اﯾﻦ ﻧﻈﺮ ﮐﻪ در اﯾﻨﺠﺎ ﭘﺎره ﺧﻂ ﻫﺎي اﻓﺮاز ﻣﺤﺪود ﺑﻪ ﻗﻄﺮ ﻧﯿﺴﺘﻨﺪ.
ﯾﮏ ذوزﻧﻘﻪ ﺑﻨﺪي اﻓﻘﯽ از ﯾﮏ ﭼﻨﺪﺿﻠﻌﯽ ،از ﻃﺮﯾﻖ رﺳﻢ ﺧﻄﻮط اﻓﻘﯽ ﮐﻪ از ﻫﺮ رأس ﭼﻨﺪﺿﻠﻌﯽ ﻣﯽ ﮔﺬرد ﺑﻪ دﺳﺖ ﻣﯽ آﯾﺪ .ﺑﻪ
∩ .ﺑﻨﺎﺑﺮاﯾﻦ sﺧﻂ دﯾﺪ = ⊂ و ﻋﺒﺎرت دﯾﮕﺮ از ﻫﺮ رأس ، vﭘﺎره ﺧﻂ اﻓﻘﯽ ﺣﺪاﮐﺜﺮ sرا ﻃﻮري ﻣﯽ ﮔﺬراﻧﯿﻢ ﮐﻪ
واﺿﺤﯽ از ﭼﭗ و راﺳﺖ vﻧﻤﺎﯾﺶ ﻣﯽ دﻫﺪ s .ﻣﯽ ﺗﻮاﻧﺪ ﮐﺎﻣﻼ در ﯾﮏ ﺳﻤﺖ vﺑﺎﺷﺪ و ﻧﯿﺰ ﻣﻤﮑﻦ اﺳﺖ .s=vﻧﻤﻮﻧﻪ اي از ﯾﮏ
ذوزﻧﻘﻪ ﺑﻨﺪي در ﺗﺼﻮﯾﺮ 2.3ﻧﺸﺎن داده ﺷﺪه اﺳﺖ .ﺑﺮاي ﺳﺎدﮔﯽ ﮐﺎر ،ﻓﻘﻂ ﭼﻨﺪ ﺿﻠﻌﯽ ﻫﺎﯾﯽ را در ﻧﻈﺮ ﻣﯽ ﮔﯿﺮﯾﻢ ﮐﻪ رأس ﻫﺎي
آن ،ﻣﺆﻟﻔﻪ ي yﻣﻨﺤﺼﺮ ﺑﻪ ﻓﺮد دارﻧﺪ :ﻫﯿﭻ دو رأﺳﯽ روي ﯾﮏ ﺧﻂ اﻓﻘﯽ ﻗﺮار ﻧﺪارد.
ﯾﮏ ذوزﻧﻘﻪ ﭼﻬﺎرﺿﻠﻌﯽ اي اﺳﺖ ﮐﻪ دو ﺿﻠﻊ ﻣﻮازي دارد .ﻣﯽ ﺗﻮان ﻣﺜﻠﺚ را ﻧﻮﻋﯽ ذوزﻧﻘﻪ در ﻧﻈﺮﮔﺮﻓﺖ ﮐﻪ ﻃﻮل ﯾﮑﯽ از دو ﺿﻠﻊ
ﻣﻮازﯾﺶ ﺻﻔﺮ اﺳﺖ .رأس ﻫﺎﯾﯽ را ﮐﻪ ﺧﻄﻮط اﻓﻘﯽ از آن ﻫﺎ ﻣﯽ ﮔﺬرﻧﺪ ،رأس ﻫﺎي ﺣﻤﺎﯾﺘﯽ ﻣﯽ ﻧﺎﻣﯿﻢ.
ﻓﺮض ﮐﻨﯿﺪ Pﭼﻨﺪﺿﻠﻌﯽ اي ﺑﺎﺷﺪ ﮐﻪ ﻫﯿﭻ دو رأﺳﯽ از آن روي ﯾﮏ ﺧﻂ اﻓﻘﯽ واﻗﻊ ﻧﺸﺪه اﺳﺖ .ﺳﭙﺲ در ﯾﮏ ذوزﻧﻘﻪ ﺑﻨﺪي
اﻓﻘﯽ ،ﻫﺮ ذوزﻧﻘﻪ دﻗﯿﻘﺎ دو رأس ﺣﻤﺎﯾﺘﯽ ﺧﻮاﻫﺪ داﺷﺖ ،ﯾﮑﯽ روي ﺿﻠﻊ ﺑﺎﻻ و دﯾﮕﺮي روي ﺿﻠﻊ ﭘﺎﯾﯿﻦ .راﺑﻄﻪ ي ﺑﯿﻦ اﻓﺮاز ذوزﻧﻘﻪ
اي و ﭼﻨﺪﺿﻠﻌﯽ ﻫﺎي ﯾﮑﻨﻮا در اﯾﻨﺴﺖ ﮐﻪ اﮔﺮ ﯾﮏ رأس ﺣﻤﺎﯾﺘﯽ روي و در ﺑﯿﻦ دو اﻧﺘﻬﺎي ﺿﻠﻊ ﺑﺎﻻﯾﯽ ﯾﺎ ﭘﺎﯾﯿﻨﯽ ذوزﻧﻘﻪ واﻗﻊ
ﺷﺪه ﺑﺎﺷﺪ ،آﻧﮕﺎه اﯾﻦ رأس ﺣﻤﺎﯾﺘﯽ ﯾﮏ زاوﯾﻪ ي داﺧﻠﯽ اﺳﺖ .اﮔﺮ ﻫﺮ رأس ﺣﻤﺎﯾﺘﯽ داﺧﻠﯽ vرا ﺑﻪ رأس ﺣﻤﺎﯾﺘﯽ ﻣﻘﺎﺑﻠﺶ در
ﻫﻤﺎن ذوزﻧﻘﻪ اي ﮐﻪ vدر آن اﺳﺖ وﺻﻞ ﮐﻨﯿﻢ ،اﯾﻦ ﻗﻄﺮ ﭼﻨﺪﺿﻠﻌﯽ Pرا ﺑﻪ ﻗﻄﻌﺎت ﯾﮑﻨﻮا ﻧﺴﺒﺖ ﺑﻪ ﺧﻂ ﻗﺎﺋﻢ ﺗﻘﺴﯿﻢ ﺧﻮاﻫﺪ
ﮐﺮد .زاوﯾﻪ ي داﺧﻠﯽ»رو ﺑﻪ ﭘﺎﯾﯿﻦ« ﺑﻪ رأس ﺣﻤﺎﯾﺘﯽ ﭘﺎﯾﯿﻦ و زاوﯾﻪ ي داﺧﻠﯽ »رو ﺑﻪ ﺑﺎﻻ« ﺑﻪ رأس ﺣﻤﺎﯾﺘﯽ ﺑﺎﻻﯾﺶ ﻣﺘﺼﻞ ﻣﯽ
ﺷﻮد .ﺑﺮاي ﻣﺜﺎل در ﺗﺼﻮﯾﺮ 2.3زاوﯾﻪ ي داﺧﻠﯽ رو ﺑﻪ ﭘﺎﯾﯿﻦ v6ﺗﻮﺳﻂ ﻗﻄﺮ v6v4از ﺑﯿﻦ ﻣﯽ رود و ﻧﯿﺰ زاوﯾﻪ ي داﺧﻠﯽ v15ﺑﺎ
اﺗﺼﺎل ﺑﻪ رأس ) v12ﮐﻪ ﺧﻮد ﯾﮏ زاوﯾﻪ ي داﺧﻠﯽ رو ﺑﻪ ﭘﺎﯾﯿﻦ اﺳﺖ( از ﺑﯿﻦ ﻣﯽ رود.
ﺣﺎل ﮐﻪ دﯾﺪﯾﻢ ذوزﻧﻘﻪ ﺑﻨﺪي ﻣﺴﺘﻘﯿﻤﺎ اﻓﺮاز ﯾﮑﻨﻮا را ﻧﺘﯿﺠﻪ ﻣﯽ دﻫﺪ ،در اداﻣﻪ ﺑﯿﺸﺘﺮ ﺑﻪ رﺳﻢ ﺧﻄﻮط راﺳﺘﯽ ﮐﻪ از ﻫﺮ رأس
ﭼﻨﺪﺿﻠﻌﯽ ﻣﯽ ﮔﺬرد ،ﻣﯽ ﭘﺮدازﯾﻢ.
5