Assignment-1-Solution.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫‪Modern Information Retrieval‬‬
‫‪Department of Computer Engineering‬‬
‫‪Sharif University of Technology‬‬
‫‪Spring 2011 – CE 40-324‬‬
‫‪Assignment #1 - Solution‬‬
‫‪-1‬‬
‫‪ (a‬در ﺟﺪول روﺑﻪرو ‪ inverted index‬ﺑﺮاي ﻣﺘﻦﻫﺎي ذﻛﺮ ﺷﺪه آورده ﺷﺪه اﺳﺖ‪.‬‬
‫ﻟﻐﺎت ﺑﻪ ﺗﺮﺗﻴﺐ اﻟﻔﺒﺎﻳﻲ ﻣﺮﺗﺐ ﻣﻲﺷﻮﻧﺪ‪ ،‬اوﻟﻴﻦ ﺧﺎﻧﻪ در ﻫﺮ ردﻳﻒ‬
‫ﻟﻐﺖ‪ ،‬دوﻣﻴﻦ ﺧﺎﻧﻪ ‪ document frequency‬و ﺳﻮﻣﻴﻦ ﺧﺎﻧﻪ ‪posting‬‬
‫‪ list‬اﺳﺖ‪.‬‬
‫‪ (b‬ﺟﺪول زﻳﺮ ‪ positional index‬را ﻧﺸﺎن ﻣﻲدﻫﺪ ﻛﻬﻤﺸﺎﺑﻪ ﻗﺴﻤﺖ ﻗﺒﻞ‬
‫اﺳﺖ‪ .‬ﺗﻨﻬﺎ ﺗﻔﺎوت در ‪ posting list‬ﻫﺎ اﺳﺖ ﻛﻪ در آنﻫﺎ ‪ position‬ﻧﻴﺰ‬
‫ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ‪.‬‬
‫>‪3: <٢‬‬
‫>‪3: <1‬‬
‫>‪3: <3‬‬
‫‪3‬‬
‫>‪2: <6‬‬
‫‪1‬‬
‫از‬
‫>‪3: <4‬‬
‫‪1‬‬
‫ﺑﺮو‬
‫>‪1: <2,6‬‬
‫‪3‬‬
‫ﺑﻪ‬
‫>‪2: <3‬‬
‫‪1‬‬
‫دﺑﺴﺘﺎن‬
‫>‪2: <1‬‬
‫>‪1: <1‬‬
‫‪3‬‬
‫رﺿﺎ‬
‫>‪2: <5‬‬
‫>‪1: <5‬‬
‫‪2‬‬
‫ﻋﻠﻲ‬
‫>‪1: <7‬‬
‫‪1‬‬
‫ﻛﺘﺎﺑﺨﺎﻧﻪ‬
‫>‪1: <3‬‬
‫‪3‬‬
‫ﻣﺪرﺳﻪ‬
‫>‪2: <8‬‬
‫‪1‬‬
‫ﻣﻲآﻳﺪ‬
‫>‪1: <4,8‬‬
‫‪2‬‬
‫ﻣﻲرود‬
‫>‪2: <2‬‬
‫>‪2: <7‬‬
‫>‪2: <4‬‬
‫‪1‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫از‬
‫‪3‬‬
‫‪1‬‬
‫ﺑﺮو‬
‫‪1‬‬
‫‪3‬‬
‫ﺑﻪ‬
‫‪2‬‬
‫‪1‬‬
‫دﺑﺴﺘﺎن‬
‫‪2‬‬
‫‪1‬‬
‫‪3‬‬
‫رﺿﺎ‬
‫‪2‬‬
‫‪1‬‬
‫‪2‬‬
‫ﻋﻠﻲ‬
‫‪1‬‬
‫‪1‬‬
‫ﻛﺘﺎﺑﺨﺎﻧﻪ‬
‫‪1‬‬
‫‪3‬‬
‫ﻣﺪرﺳﻪ‬
‫‪2‬‬
‫‪1‬‬
‫ﻣﻲآﻳﺪ‬
‫‪1‬‬
‫‪2‬‬
‫ﻣﻲرود‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪ (c‬ﺑﺮاي ﭘﺎﺳﺦ ﺑﻪ ﭘﺮﺳﻤﺎن ذﻛﺮ ﺷﺪه اﺑﺘﺪا دو ﻟﻐﺖ »ﻛﺘﺎﺑﺨﺎﻧﻪ« و »ﻋﻠﻲ« در ﻣﻴﺎن ﻟﻐﺎت ﺟﺴﺘﺠﻮ ﻣﻲﺷﻮﻧﺪ‪ .‬ﺳﭙﺲ ‪ posting list‬ﻣﺮﺑﻮط ﺑﻪ آنﻫﺎ‬
‫ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮد‪ .‬اﻳﻦ دو ‪ posting list‬ﺑﺎﻳﺪ ﺑﺎ ﻫﻢ ‪ and‬ﺷﻮﻧﺪ ﺗﺎ ﻣﺘﻦﻫﺎي ﻣﺸﺘﺮك از آنﻫﺎ ﺑﻪ دﺳﺖ آﻳﺪ‪ .‬ﺑﺮاي اﻳﻦ ﻛﺎر دو اﺷﺎرهﮔﺮ در اﺑﺘﺪاي‬
‫دو ﻟﻴﺴﺖ ﻗﺮار ﻣﻲﮔﻴﺮد‪ .‬در اوﻟﻴﻦ ﮔﺎم ﻣﺘﻦ ‪ 1‬در ﻫﺮ دو وﺟﻮد دارد‪ .‬ﭘﺲ اﻳﻦ ﻣﺘﻦ ﺑﻪ ﺟﻮاب اﺿﺎﻓﻪ ﻣﻲﺷﻮد‪ .‬ﺳﭙﺲ ﻫﺮ دو اﺷﺎرهﮔﺮ ﻳﻚ ﻗﺪم‬
‫ﺑﻪ ﺟﻠﻮ ﻣﻲروﻧﺪ‪ .‬در ﮔﺎم ﺑﻌﺪي ﻟﻴﺴﺖ ﻣﺮﺑﻮط ﺑﻪ »ﻛﺘﺎﺑﺨﺎﻧﻪ« ﺗﻤﺎم ﻣﻲﺷﻮد در ﻧﺘﻴﺠﻪ ﻛﺎر ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ و ﺟﻮاب ﻣﺘﻦ ‪ 1‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫‪ (d‬ﭘﺎﺳﺦ اﻳﻦ ﭘﺮﺳﻤﺎن ﻣﺘﻦﻫﺎﻳﻲ اﺳﺖ ﻛﻪ در آنﻫﺎ ﻟﻐﺖ »رﺿﺎ« ﺣﺪاﻛﺜﺮ ﺳﻪ ﻟﻐﺖ ﻓﺎﺻﻠﻪ از ﻫﺮ ﻃﺮف از ﻟﻐﺖ »ﻣﻲرود« ﻗﺮار ﮔﺮﻓﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫ﺑﻨﺎﺑﺮاﻳﻦ ﭘﺎﺳﺦ ﻣﺘﻦ ‪ 1‬و ‪ 2‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫‪-2‬‬
‫‪ :Stop lists (a‬اﺳﺘﻔﺎده از ‪ recall ،Stop lists‬را ﺑﻴﺸﺘﺮ ﻣﻲﻛﻨﺪ ﭼﻮن ﺗﻤﺎم اﺳﻨﺎد ﻣﺮﺑﻮط ﻗﺒﻠﻲ ﻫﻤﭽﻨﺎن ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮﻧﺪ و ﺗﻌﺪادي ﺳﻨﺪ ﻫﻢ در‬
‫ﺟﻮاب ﺧﻮاﻫﺪ آﻣﺪ ﻛﻪ ﻳﺎ در ﺣﺎﻟﺖ ﻗﺒﻞ وﺟﻮد ﻧﺪاﺷﺘﻪاﻧﺪ و ﻧﺎﻣﺮﺑﻮط ﻫﺴﺘﻨﺪ و ﻳﺎ در ﺣﺎﻟﺖ ﻗﺒﻞ وﺟﻮد ﻧﺪاﺷﺘﻪاﻧﺪ و ﻣﺮﺑﻮط ﻫﺴﺘﻨﺪ ﺑﻪ ﻋﻨﻮان‬
‫ﻣﺜﺎل اﮔﺮ ﻛﺎرﺑﺮ ﻋﺒﺎرت »از اردﻳﺒﻬﺸﺖ ﺗﺎ ﺷﻬﺮﻳﻮر« را ﺟﺴﺘﺠﻮ ﻛﻨﺪ‪ ،‬ﺑﺎ ﺣﺬف ﻟﻐﺎت »از« و »ﺗﺎ« ﻋﺒﺎرت »از اردﻳﺒﻬﺸﺖ اﻟﻲ ﺷﻬﺮﻳﻮر« ﻫﻢ‬
‫ﺑﺎزﻳﺎﺑﻲ ﻣﻲ ﺷﻮد ﻛﻪ ﻣﻄﻠﻮب ﻛﺎرﺑﺮ اﺳﺖ‪ .‬ﺑﺎ ﺣﺬف ‪ Stop word‬ﻫﺎ ‪ precision‬ﭘﺎﻳﻴﻦ ﻣﻲآﻳﺪ ﻣﺎﻧﻨﺪ ﻋﺒﺎرت »از ﺧﺎﻧﻪ ﺗﺎ ﻣﺪرﺳﻪ« ﻛﻪ ﺑﺎ ﺣﺬف‬
‫ﻛﻠﻤﺎت اﺿﺎﻓﻲ ﺑﻪ ﻋﺒﺎرت »ﺧﺎﻧﻪ ﻣﺪرﺳﻪ« ﺗﺒﺪﻳﻞ ﻣﻲﺷﻮد و ﻣﻤﻜﻦ اﺳﺖ ﻣﺘﻮﻧﻲ ﻛﻪ ﺑﺎزﻳﺎﺑﻲ ﻣﻲﻛﻨﺪ ﻣﻮرد ﻧﻈﺮ ﻛﺎرﺑﺮ ﻧﺒﺎﺷﺪ‪ .‬در اﻳﻦ ﺣﺎﻟﺖ‬
‫ﺗﻌﺪاد اﺳﻨﺎد ﻛﻪ ﺑﺎزﻳﺎﺑﻲ ﺷﺪهاﻧﺪ ﺑﻴﺸﺘﺮ ﺷﺪه وﻟﻲ ﺗﻌﺪاد اﺳﻨﺎد ﻣﺮﺑﻮط ﺑﺎزﻳﺎﺑﻲ ﺷﺪه ﺛﺎﺑﺖ ﻣﻲﻣﺎﻧﺪ در ﻧﺘﻴﺠﻪ ‪ precision‬ﻛﺎﻫﺶ ﺧﻮاﻫﺪ ﻳﺎﻓﺖ‪.‬‬
‫‪ :Stemming (b‬اﺳﺘﻔﺎده از ‪ Stemming‬ﻣﻲﺗﻮاﻧﺪ ‪ recall‬را اﻓﺰاﻳﺶ دﻫﺪ ﭼﻮن ﻣﻲﺗﻮاﻧﺪ اﺳﻨﺎدي را ﺑﺎزﻳﺎﺑﻲ ﻛﻨﺪ ﻛﻪ دﻗﻴﻘﺎ ﻋﺒﺎرت ﻣﻮرد ﻧﻈﺮ در‬
‫آنﻫﺎ ﻧﺒﺎﺷﺪ وﻟﻲ اﺳﻨﺎد ﻣﺮﺑﻮط ﺑﺎﺷﻨﺪ‪ .‬ﺑﻪ ﻃﻮر ﻣﺜﺎل ﺑﺮاي ﻋﺒﺎرت »درﺧﺘﺎن ﺳﺒﺰ« اﺳﻨﺎدي ﻛﻪ ﻋﺒﺎرت »درﺧﺖ ﺳﺒﺰ« را دارﻧﺪ ﻧﻴﺰ ﺑﺎزﻳﺎﺑﻲ ﻣﻲ‪-‬‬
‫ﺷﻮﻧﺪ ﻛﻪ ﺟﺰو اﺳﻨﺎد ﻣﺮﺑﻮط ﻫﺴﺘﻨﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻣﻲﺗﻮاﻧﺪ ‪ precision‬را ﻛﻢ ﻛﻨﺪ ﭼﺮا ﻛﻪ ﺗﻌﺪاد اﺳﻨﺎد ﺑﺎزﻳﺎﺑﻲ ﺷﺪه ﺑﺎ ‪ Stemming‬اﻓﺰاﻳﺶ ﻣﻲ‪-‬‬
‫ﻳﺎﺑﺪ‪ .‬اﮔﺮ ﺗﻌﺪاد اﺳﻨﺎد ﻣﺮﺑﻮط ﺑﺎزﻳﺎﺑﻲ ﺷﺪه ﺑﻪ ﻫﻤﺎن ﻧﺴﺒﺖ اﻓﺰاﻳﺶ ﻧﻴﺎﺑﺪ ‪ precision‬ﻛﻢ ﻣﻲﺷﻮد‪ .‬اﻳﻦ رﺧﺪاد اﻏﻠﺐ زﻣﺎﻧﻲ اﺗﻔﺎق ﻣﻲاﻓﺘﺪ ﻛﻪ‬
‫ﻣﻨﻈﻮر ﻛﺎرﺑﺮ دﻗﻴﻘﺎ ﻋﺒﺎرت وارد ﺷﺪه ﺑﺎﺷﺪ‪ .‬ﺑﻪ ﻃﻮر ﻣﺜﺎل ﺑﺮاي ﭘﺮﺳﻤﺎن »ﺳﻤﻔﻮﻧﻲ ﻣﺮدﮔﺎن« ﺟﺴﺘﺠﻮي ﭘﺮﺳﻤﺎن »ﺳﻤﻔﻮﻧﻲ ﻣﺮد« اﺳﻨﺎد‬
‫ﻧﺎﻣﺮﺗﺒﻂ زﻳﺎدي ﺑﺎزﻳﺎﺑﻲ ﻣﻲﻛﻨﺪ و دﻗﺖ ﻛﻢ ﻣﻲﺷﻮد‪.‬‬
‫‪ :Phrase indexing (c‬ﺑﺮاي ﭘﺮﺳﻤﺎنﻫﺎي ‪ phrase‬اﺳﺘﻔﺎده از ‪ phrase indexing‬دﻗﺖ را ﺑﺎﻻ ﺑﺮده و ‪ recall‬را ﻛﻢ ﻣﻲﻛﻨﺪ‪ .‬ﺑﻪ ﻃﻮر ﻣﺜﺎل ﻋﺒﺎرت‬
‫»ﻛﻼس دوم راﻫﻨﻤﺎﻳﻲ« ﺑﺪون ‪ phrase indexing‬ﻣﻲﺗﻮاﻧﺪ ﺳﻨﺪ »ﻣﺪﻳﺮ ﻣﻌﻠﻢ را ﭘﺲ از زﻧﮓ دوم ﺑﻪ ﻛﻼس راﻫﻨﻤﺎﻳﻲ ﻛﺮد« را ﺑﺎزﻳﺎﺑﻲ ﻛﻨﺪ‬
‫در ﺣﺎﻟﻲ ﻛﻪ ﺳﻨﺪ ﻣﺮﺗﺒﻄﻲ ﻧﻴﺴﺖ وﻟﻲ ﺑﺎ ‪ phrase indexing‬اي دو ﻛﻠﻤﻪاي ﻓﻘﻂ اﺳﻨﺎدي ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮﻧﺪ ﻛﻪ ﻋﺒﺎرات »ﻛﻼس دوم« و »دوم‬
‫راﻫﻨﻤﺎﻳﻲ« در آنﻫﺎ ﻣﻮﺟﻮد ﺑﺎﺷﺪ در ﻧﺘﻴﺠﻪ اﺳﻨﺎد ﻧﺎﻣﺮﺗﺒﻂ ﻛﻤﺘﺮي ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮﻧﺪ ﭘﺲ دﻗﺖ ﺑﺎﻻ ﻣﻲرود‪ Recall .‬ﻛﻢ ﻣﻲﺷﻮد ﭼﻮن اﺳﻨﺎد‬
‫ﻣﺮﺗﺒﻂ ﻛﻤﺘﺮي ﻣﻤﻜﻦ اﺳﺖ ﺑﺎزﻳﺎﺑﻲ ﺷﻮﻧﺪ ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ﻋﺒﺎرت »ﻛﻼس در ﭘﺎﻳﻪي دوم راﻫﻨﻤﺎﻳﻲ« ﺑﺎ ‪ phrase indexing‬ﺑﺎزﻳﺎﺑﻲ ﻧﻤﻲﺷﻮد‬
‫در ﺣﺎﻟﻲ ﻛﻪ ﻣﻄﻠﻮب ﻛﺎرﺑﺮ اﺳﺖ‪.‬‬
‫‪ (d‬ﻟﻐﺎت ﻫﻢ ﻣﻌﻨﻲ‪ :‬ﮔﺴﺘﺮش ﭘﺮﺳﻤﺎن ﺑﺎ ﻛﻠﻤﺎت ﻫﻢ ﻣﻌﻨﻲ دو ﺣﺎﻟﺖ ﻣﺨﺘﻠﻒ ﻣﻲﺗﻮاﻧﺪ داﺷﺘﻪ ﺑﺎﺷﺪ‪ :‬اﮔﺮ ﻛﻠﻤﺎت ﻫﻢ ﻣﻌﻨﻲ‪ ،‬ﻛﻠﻤﺎت ﻣﻮرد ﻧﻈﺮ‬
‫ﻛﺎرﺑﺮ ﺑﺎﺷﻨﺪ ﻣﺎﻧﻨﺪ »ﻣﺎﺷﻴﻦ« ﺑﺮاي ﻟﻐﺖ »اﺗﻮﻣﺒﻴﻞ« در اﻳﻦ ﺻﻮرت دﻗﺖ ﺑﺎﻻ ﻣﻲرود ﭼﻮن ﻧﺴﺒﺖ ﺑﻴﺸﺘﺮي از اﺳﻨﺎد ﺑﺎزﻳﺎﺑﻲ ﺷﺪه اﺳﻨﺎد ﻣﺮﺗﺒﻂ‬
‫ﺧﻮاﻫﻨﺪ ﺑﻮد و ‪ recall‬ﻫﻢ ﺑﺎﻻ ﻣﻲرود ﭼﻮن اﺳﻨﺎد ﻣﺮﺗﺒﻂ ﺑﻴﺸﺘﺮي ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮﻧﺪ‪ .‬اﮔﺮ ﻛﻠﻤﺎت ﻫﻢ ﻣﻌﻨﻲ‪ ،‬ﻛﻠﻤﺎت ﻣﻮرد ﻧﻈﺮ ﻛﺎرﺑﺮ ﻧﺒﺎﺷﻨﺪ ﺑﻪ‬
‫ﻃﻮر ﻣﺜﺎل در ﺻﻮرﺗﻲ ﻛﻪ ﻓﺮدي ﺑﺎ ﻧﺎم »ﺳﭙﻬﺮ آزادي« ﺟﺴﺘﺠﻮ ﺷﻮد ﺑﻪ ﻫﻤﺮاه آن »آﺳﻤﺎن آزادي« ﻧﻴﺰ ﺟﺴﺘﺠﻮ ﺷﻮد‪ ،‬اﺳﻨﺎد ﻧﺎﻣﺮﺗﺒﻂ زﻳﺎدي‬
‫ﻋﻼوه ﺑﺮ اﺳﻨﺎد ﻣﺮﺗﺒﻂ ﺑﺎزﻳﺎﺑﻲ ﺧﻮاﻫﻨﺪ ﺷﺪ و اﻳﻦ دﻗﺖ را ﭘﺎﻳﻴﻦ ﻣﻲآورد وﻟﻲ ‪ recall‬ﺗﻐﻴﻴﺮي ﻧﻤﻲﻛﻨﺪ ﭼﻮن اﺳﻨﺎد ﻣﺮﺗﺒﻂ ﻗﺒﻠﻲ ﻫﻤﭽﻨﺎن‬
‫ﺑﺎزﻳﺎﺑﻲ ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫‪-3‬‬
‫‪ (a‬ﻣﻲﺗﻮان در )‪ O(x+y‬ﺟﻮاب را ﺑﻪ دﺳﺖ آورد ﺑﺪﻳﻦ ﺻﻮرت ﻛﻪ ﻳﻚ اﺷﺎرهﮔﺮ ﺑﻪ اول ﻟﻴﺴﺖ ‪ a‬و ﻳﻚ اﺷﺎرهﮔﺮ ﺑﻪ اول ﻟﻴﺴﺖ ‪ b‬در ﻧﻈﺮ ﻣﻲ‪-‬‬
‫ﮔﻴﺮﻳﻢ‪ .‬در ﻫﺮ ﻣﺮﺣﻠﻪ اﮔﺮ ﻫﺮ دو ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ آنﻫﺎ اﺷﺎره ﻣﻲﻛﻨﻨﺪ ﺑﺮاﺑﺮ ﺑﻮد ﻫﺮ دو اﺷﺎرهﮔﺮ را ﺑﻪ ﺟﻠﻮ ﻣﻲﺑﺮﻳﻢ‪ .‬اﮔﺮ ﻋﺪدي ﻛﻪ‬
‫‪2‬‬
‫اﺷﺎرهﮔﺮ ‪ a‬ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ﻛﻮﭼﻜﺘﺮ ﺑﻮد ﻋﺪد را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻛﺮده و اﺷﺎرهﮔﺮ ‪ a‬را ﺑﻪ ﺟﻠﻮ ﻣﻲﺑﺮﻳﻢ‪ .‬اﮔﺮ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮ‬
‫‪b‬‬
‫ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ﻛﻮﭼﻜﺘﺮ ﺑﻮد اﺷﺎرهﮔﺮ ‪ b‬را ﺑﻪ ﺟﻠﻮ ﻣﻲﺑﺮﻳﻢ‪ .‬اﮔﺮ در ﭘﺎﻳﺎن از ﻟﻴﺴﺖ ‪ a‬ﭼﻴﺰي ﺑﺎﻗﻲ ﻣﺎﻧﺪه ﺑﻮد در ﺣﺎﻟﻲ ﻛﻪ ﻟﻴﺴﺖ ‪ b‬ﺗﻤﺎم‬
‫ﺷﺪه ﺗﻤﺎﻣﻲ اﻳﻦ ﻋﺪدﻫﺎ را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻣﻲﻛﻨﻴﻢ‪.‬‬
‫‪ (b‬ﻧﻤﻲﺗﻮان در )‪ O(x+y‬ﺟﻮاب را ﺑﻪ دﺳﺖ آورد‪ .‬ﻳﻚ راه ﺣﻞ اﻳﻦ اﺳﺖ ﻛﻪ ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ ﻗﺒﻞ ﻳﻚ اﺷﺎرهﮔﺮ ﺑﻪ اول ﻟﻴﺴﺖ ‪ a‬و ﻳﻚ اﺷﺎرهﮔﺮ ﺑﻪ‬
‫اول ﻟﻴﺴﺖ ‪ b‬در ﻧﻈﺮ ﻣﻲﮔﻴﺮﻳﻢ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺑﺎﻳﺪ آﺧﺮﻳﻦ ﻋﺪدي ﻛﻪ در ﻟﻴﺴﺖ ‪ b‬ﺑﻮده را ﻧﻴﺰ ﻧﮕﻬﺪارﻳﻢ‪ Max .‬ﺑﻴﻦ آﺧﺮﻳﻦ ﻋﺪدي ﻛﻪ در ﻟﻴﺴﺖ‬
‫‪ b‬ﺑﻮده و آﺧﺮﻳﻦ ﻋﺪد از ﻟﻴﺴﺖ ﺟﻮاب را ‪ c‬در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ .‬در ﻫﺮ ﻣﺮﺣﻠﻪ اﮔﺮ ﻫﺮ دو ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ آنﻫﺎ اﺷﺎره ﻣﻲﻛﻨﻨﺪ ﺑﺮاﺑﺮ ﺑﻮد‪،‬‬
‫از ‪ c‬ﺗﺎ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮﻫﺎ ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﻨﺪ ) ﺷﺎﻣﻞ ﺧﻮد ﻋﺪد ﻫﻢ ﻣﻲﺷﻮد ( را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻛﺮده وﻫﺮ دو اﺷﺎرهﮔﺮ را ﺑﻪ ﺟﻠﻮ‬
‫ﻣﻲﺑﺮﻳﻢ‪ .‬اﮔﺮ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮ ‪ a‬ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ﻛﻮﭼﻜﺘﺮ ﺑﻮد‪ ،‬از ‪ c‬ﺗﺎ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮ ‪ a‬ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ) ﺷﺎﻣﻞ ﺧﻮد ﻋﺪد ﻫﻢ‬
‫ﻣﻲﺷﻮد ( را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻛﺮده و اﺷﺎرهﮔﺮ ‪ a‬را ﺑﻪ ﺟﻠﻮ ﻣﻲﺑﺮﻳﻢ‪ .‬ﭼﺮا ﻛﻪ اﻋﺪاد ﺑﻴﻨﺎﺑﻴﻨﻲ در ﻟﻴﺴﺖ ‪ b‬ﻧﻴﺴﺘﻨﺪ ﭘﺲ ﺟﺰو ﺟﻮاب ﻣﻲ‪-‬‬
‫ﺑﺎﺷﻨﺪ‪ .‬اﮔﺮ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮ ‪ b‬ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ﻛﻮﭼﻜﺘﺮ ﺑﻮد‪ ،‬از ‪ c‬ﺗﺎ ﻋﺪدي ﻛﻪ اﺷﺎرهﮔﺮ ‪ b‬ﺑﻪ آن اﺷﺎره ﻣﻲﻛﻨﺪ ) ﺷﺎﻣﻞ ﺧﻮد ﻋﺪد‬
‫ﻧﻤﻲﺷﻮد ( را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻛﺮده و اﺷﺎرهﮔﺮ ‪ b‬را ﺑﻪ ﺟﻠﻮ ﻣﻲﺑﺮﻳﻢ‪ .‬اﮔﺮ در ﭘﺎﻳﺎن از ﻟﻴﺴﺖ ‪ a‬ﭼﻴﺰي ﺑﺎﻗﻲ ﻣﺎﻧﺪه ﺑﻮد در ﺣﺎﻟﻲ ﻛﻪ‬
‫ﻟﻴﺴﺖ ‪ b‬ﺗﻤﺎم ﺷﺪه از ‪ c‬ﺗﺎ آﺧﺮﻳﻦ ﻋﺪد ﻣﻌﺘﺒﺮ را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻣﻲﻛﻨﻴﻢ‪ .‬اﮔﺮ در ﭘﺎﻳﺎن از ﻟﻴﺴﺖ ‪ b‬ﭼﻴﺰي ﺑﺎﻗﻲ ﻣﺎﻧﺪه ﺑﻮد در ﺣﺎﻟﻲ‬
‫ﻛﻪ ﻟﻴﺴﺖ ‪ a‬ﺗﻤﺎم ﺷﺪه از ‪ c‬ﺗﺎ آﺧﺮﻳﻦ ﻋﺪد ﻣﻌﺘﺒﺮ ﻏﻴﺮ از اﻋﺪاد ﺑﺎﻗﻲ ﻣﺎﻧﺪه در ﻟﻴﺴﺖ ‪ b‬را ﺑﻪ ﻟﻴﺴﺖ ﺟﻮاب اﺿﺎﻓﻪ ﻣﻲﻛﻨﻴﻢ‪ .‬زﻣﺎن اﺟﺮاي اﻳﻦ‬
‫اﻟﮕﻮرﻳﺘﻢ )‪ O(n‬اﺳﺖ ﻛﻪ ‪ n‬ﺗﻌﺪاد ﻛﻞ اﺳﻨﺎد اﺳﺖ‪.‬‬
‫راه دﻳﮕﺮ ﺗﺒﺪﻳﻞ اﻳﻦ ﭘﺮﺳﻤﺎن ﺑﻪ ﻳﻚ ﭘﺮﺳﻤﺎن ‪ and‬اﺳﺖ ﻛﻪ ﺑﺮاﺑﺮ )‪ NOT(NOT a AND b‬ﺧﻮاﻫﺪ ﺑﻮد‪ .‬در اﻳﻦ روش ﻧﻴﺰ ﺑﺮاي ‪ NOT‬ﮔﺮﻓﺘﻦ‬
‫از ﻳﻚ ﻟﻴﺴﺖ‪ ،‬زﻣﺎن اﺟﺮا )‪ O(n‬اﺳﺖ ﭼﺮا ﻛﻪ ﺑﺎﻳﺪ از ﻟﻴﺴﺖ ﻛﻞ اﺳﻨﺎد‪ ،‬اﺳﻨﺎد ﻣﺮﺑﻮط ﺑﻪ ﻣﺠﻤﻮﻋﻪي ﻣﺮﺑﻮﻃﻪ را ﺣﺬف ﻛﺮد‪ .‬در ﻧﺘﻴﺠﻪ زﻣﺎن‬
‫اﺟﺮاي اﻟﮕﻮرﻳﺘﻢ )‪ O(2n+x+y‬ﻳﻌﻨﻲ )‪ O(n‬ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫‪-4‬‬
‫‪ (a‬ﺧﻴﺮ ﻛﺎﻓﻲ ﻧﻴﺴﺖ ﭼﺮا ﻛﻪ در ﻳﻚ ﺟﻤﻠﻪ ﺑﻮدن ﻫﻢ ﺑﺎﻳﺪ ﻟﺤﺎظ ﺷﻮد‪ .‬ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ ﺟﻤﻠﻪﻫﺎي داﺧﻞ ﻫﺮ ﺳﻨﺪ ﺑﻪ ﻋﻨﻮان واﺣﺪ در ﻧﻈﺮ ﮔﺮﻓﺘﻪ‬
‫ﻣﻲﺷﻮﻧﺪ‪.‬‬
‫‪ (b‬در اﻳﻦ ﺣﺎﻟﺖ ﺳﺎﺧﺘﺎر ‪ positional index‬ﺑﺎﻳﺪ در ﺳﻪ ﺳﻄﺢ ﺗﻌﺮﻳﻒ ﺷﻮد‪ ،‬ﺳﻄﺢ اول اﺳﻨﺎد‪ ،‬ﺳﻄﺢ دوم ﺟﻤﻼت داﺧﻞ ﻫﺮ ﺳﻨﺪ و ﺳﻄﺢ ﺳﻮم‬
‫‪ posting list‬ﻫﺎ ﺧﻮاﻫﻨﺪ ﺑﻮد‪.‬‬
‫‪(c‬‬
‫)‪POSITIONALSENTCIALINTERSECT(p1, p2, k‬‬
‫)( ← ‪answer‬‬
‫‪while p1 ≠ NIL and p2 ≠ NIL‬‬
‫)‪do if docID(p1) = docID(p2‬‬
‫)‪then psen1 ← positions(p1‬‬
‫)‪psen2 ← positions(p2‬‬
‫‪while psen1 ≠ NIL and psen2 ≠ NIL‬‬
‫)‪do if senID(psen1) = senID(psen2‬‬
‫)( ← ‪then l‬‬
‫‪1.‬‬
‫‪2.‬‬
‫‪3.‬‬
‫‪4.‬‬
‫‪5.‬‬
‫‪6.‬‬
‫‪7.‬‬
‫‪8.‬‬
‫‪9.‬‬
‫)‪pp1 ← positions(psen1‬‬
‫‪10.‬‬
‫)‪pp2 ← positions(psen2‬‬
‫‪while pp1 ≠ NIL‬‬
‫‪do while pp2 ≠ NIL‬‬
‫‪do if |pos(pp1) − pos(pp2)| ≤ k‬‬
‫))‪then ADD(l, pos(pp2‬‬
‫)‪else if pos(pp2) > pos(pp1‬‬
‫‪then break‬‬
‫‪11.‬‬
‫‪12.‬‬
‫‪13.‬‬
‫‪14.‬‬
‫‪15.‬‬
‫‪16.‬‬
‫‪17.‬‬
‫‪3‬‬
pp2 ← next(pp2)
18.
19.
20.
21.
while l ≠ () and |l[0] − pos(pp1)| > k
do DELETE(l[0])
for each ps ∈ l
22.
do ADD(answer, (docID(p1), pos(pp1), psi))
23.
pp1 ← next(pp1)
psen1 ← next(psen1)
24.
psen2 ← next(psen2)
else if senID(psen1) < senID(psen2)
then psen1 ← next(psen1)
25.
26.
27.
else psen2 ← next(psen2)
else if docID(p1) < docID(p2)
then p1 ← next(p1)
28.
29.
30.
31.
else p2 ← next(p2)
32. return answer
-5
am$
cram
gram
cra
cram
scram
gra
gram
pam
spam
ram
cram
scr
scram
spa
spam
$cr
cram
$gr
gram
$sc
scram
$sp
spam
scram
gram
scram
4
spam
‫‪ -6‬ﻣﻄﺎﺑﻖ ﺟﺪول زﻳﺮ ‪ edit distance‬ﺑﺮاي دو ﻟﻐﺖ »ﻛﺎرﻳﺰ« و »ﺳﺎﻳﺒﺎن« ﻋﺪد ‪ 5‬اﺳﺖ‪.‬‬
‫ا‬
‫ن‬
‫ي‬
‫ب‬
‫س‬
‫ا‬
‫‪6‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪0‬‬
‫‪7‬‬
‫‪6‬‬
‫‪6‬‬
‫‪6‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪1‬‬
‫‪7‬‬
‫‪5‬‬
‫‪6‬‬
‫‪5‬‬
‫‪6‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪5‬‬
‫‪3‬‬
‫‪4‬‬
‫‪3‬‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪1‬‬
‫‪1‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪3‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪4‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪5‬‬
‫‪5‬‬
‫‪5‬‬
‫‪6‬‬
‫‪5‬‬
‫ك‬
‫‪1‬‬
‫‪2‬‬
‫ا‬
‫‪2‬‬
‫‪3‬‬
‫ر‬
‫‪3‬‬
‫‪4‬‬
‫ي‬
‫‪4‬‬
‫‪5‬‬
‫‪5‬‬
‫ز‬