ã³ã³ãã¥ãŒã¿æŒç¿II 第12å æ¢çŽ¢ã¢ã«ãŽãªãºã ¶
ä»åã®äž»åœ¹ã¯ããªã¹ãã®äžããç®åœãŠã®å€ãèŠã€ãåºã æ¢çŽ¢ïŒãµãŒãïŒ ã§ãã第11åã®æŽåïŒãœãŒãïŒã«ç¶ããã¢ã«ãŽãªãºã ã®å®çªé¡æã§ããæ¬¡ã®3 ã€ãåŠã³ãŸãã
- ç·åœ¢æ¢çŽ¢ïŒå é ããé ã«èª¿ã¹ãããã¡ã°ãçŽ æŽãªæ¢çŽ¢ïŒ
- äºåæ¢çŽ¢ïŒæŽåæžã¿ã®ãªã¹ãããååãã€ã«çµãèŸŒãæ¢çŽ¢ïŒ
- ã¢ã«ãŽãªãºã ã®è¯ãæªãïŒæ¯èŒåæ°ãæ°ããŠ2 ã€ã®æ¢çŽ¢ãæ¯ã¹ãã第11åã®ç¶ãïŒ
æ°ããææ³ã¯1 ã€ãåºãŠããŸããããããŸã§ã«åŠãã for æ/if æïŒif-elif-elseïŒ/è«çæŒç®åïŒandïŒã ãã§ã代衚çãªæ¢çŽ¢ã¢ã«ãŽãªãºã ãæžããŸãã
1. æ¢çŽ¢ãšã¯Â¶
æ¢çŽ¢ïŒãµãŒãïŒ ãšã¯ãããŒã¿ã®éãŸãã®äžãããç®åœãŠã®å€ãèŠã€ãåºãåŠçã§ããé£çµ¡å ããåã ã¡ã®ååãæ¢ããååäžèЧããç®åœãŠã®ååãæ¢ããèŸæžã§åèªãåŒãââã©ããæ¢çŽ¢ã§ããããã°ã©ã ã®äžçã§ããæ¢çŽ¢ã¯æŽåãšäžŠã¶ãã£ãšãåºæ¬çãªã¢ã«ãŽãªãºã ã§ãã
ãã®è³æã§ã¯ããªã¹ã numbers ã®äžã«ãæ¢ãå€ target ããããããããªã ã©ã®äœçœ®ïŒæ·»åïŒ ã«ãããããšããåé¡ãèããŸãã
1.1 埩ç¿: ã¢ã«ãŽãªãºã ã®èªã¿æ¹Â¶
第11åã§åŠãã èªã¿æ¹ããä»åããã®ãŸãŸäœ¿ããŸãã
- æé /ãããŒãã£ãŒã/Python ã³ãŒãã¯ãåãã¢ã«ãŽãªãºã ã®3 ã€ã®è¡šçŸã
- ãã¯ããã®å€/é²ãæ¹/ç¶ããæ¡ä»¶ãã® 3 ç¹ã»ãã ãèŠã€ãããããŸãšããŠ1 ã€ã® for æã«ç³ãã
- æ»ã以å€ã®ãããªãã°ã㯠if æã«ãªãã
ä»åã¯ããã«ãæ¢çŽ¢ãªãã§ã¯ã®èªã¿æ¹ã1 ã€å ãããŸããæ¢çŽ¢ã¯ èŠã€ãã£ããããã§ãããã åŠçã§ãããšããã for æã¯ãéäžã§ãããã«æåŸãŸã§åãç¶ããŸããããã§ãèŠã€ãã£ããã©ããã倿°ã§èŠããŠãããèŠã€ãã£ãåŸã¯äœãããªãããšããæžãæ¹ã䜿ããŸãïŒ2ã4 ç« ã§ç¹°ãè¿ãåºãŠããŸãïŒã
2. ç·åœ¢æ¢çŽ¢Â¶
2.1 ããããªãã¶
ãã¡ã°ãçŽ æŽãªæ¢çŽ¢ããå§ããŸããå
é ããé ã«1 ã€ãã€ãtarget ãšçãããã調ã¹ãæ¹æ³ã§ããããã ç·åœ¢æ¢çŽ¢ ãšåŒã³ãŸãããŸããããããªãããã ãã調ã¹ãŸããæé ã§æžããšæ¬¡ã®ãšããã§ãã
- ãªã¹ã
numbersãšæ¢ãå€targetãçšæãããèŠã€ãã£ããã©ããã衚ãflgã 0 ãšããäœçœ®jã 0 ãšãããnumbers[j]ãtargetãšçãããªãã°ãflgã 1 ãšãããjã1 å¢ãããjããªã¹ãã®é·ãããå°ãããã°ãæé 2 ãžæ»ããflgãåºåããã
3 ç¹ã»ããïŒæé 1 & 3ïŒã1 çµãªã®ã§ for æ1 ã€ããããªãã°ãïŒæé 2ïŒã1 ãæãªã®ã§ if æ1 ã€ã§ã§ããããšèŠåœãä»ããŸãã
ãªããflg ã¯ãã©ã°ãæã§ãã
ãèŠã€ãã£ããã©ãããã衚ã倿°ã§ã0 ãªããèŠã€ãããªãã£ããã1 ãªããèŠã€ãã£ãããšããæå³ã§ãã
ãã©ã°ãç«ã€ããªããŠãã衚çŸãèããããšããããããããŸãããããŸãã«ãã®ããšã§ãã
numbers = [4, 2, 7, 5, 7]
target = 5 # æ¢ãå€
flg = 0 # èŠã€ãã£ãã 1 ã«ãã(ãŸã èŠã€ãã£ãŠããªãã®ã§ 0)
for j in range(0, len(numbers)): # å
é ããæ«å°ŸãŸã§é ã«èª¿ã¹ã
if numbers[j] == target: # target ãšçãããã°
flg = 1 # ãèŠã€ãã£ãããšèšé²ãã
print("èŠã€ãã£ãã:", flg)
å®è¡çµæ
èŠã€ãã£ãã: 1
5 ã¯3 çªç®ã«ããã®ã§ãflg ã¯éäžã§ 1 ã«ãªããŸããtarget = 3 ã«å€ããŠå®è¡ãããšããªã¹ãã« 3 ã¯ç¡ãã®ã§ 0 ã®ãŸãŸã§ãããããããªå€ã§è©ŠããŠãã ããã
2.2 ã©ãã«ãããïŒäœçœ®ã®æ¢çŽ¢ïŒÂ¶
ãããããªãããã ãã§ãªããã©ã®äœçœ®ã«ããã ãç¥ãããããšã®ã»ããå€ãã§ãïŒç¬¬11åã®éžæãœãŒãã§ããæå°å€ã®ãäœçœ®ãmin_index ã䜿ããŸããïŒãèŠã€ãã£ãäœçœ®ãå
¥ãã倿° pos ãçšæããèŠã€ããã pos = j ãšèšé²ããŸãã
pos ã®ã¯ããã®å€ã¯ -1 ã«ããŸãã0 ã ãšã0 çªç®ã§èŠã€ãã£ãããšåºå¥ãä»ããŸãããã-1 ã¯äœçœ®ãšããŠååšããªãã®ã§ããæåŸãŸã§èŠã€ãããªãã£ããã®åå³ãšããŠäœ¿ããŸãïŒæ¢çŽ¢ã®å®çªã®æžãæ¹ã§ãïŒã
numbers = [4, 2, 7, 5, 7] # 7 ã2 ãæã«ãã
target = 7
pos = -1 # èŠã€ãã£ãäœçœ®ã-1 ã¯ãèŠã€ãã£ãŠããªããã®åå³
for j in range(0, len(numbers)):
if numbers[j] == target:
pos = j # èŠã€ãã£ãäœçœ®ãèšé²ãã
print("äœçœ®:", pos)
å®è¡çµæ
äœçœ®: 4
7 ã¯2 çªç®ãš4 çªç®ã®2 ãæã«ãããŸããåºå㯠4ãã€ãŸã æåŸã«èŠã€ãã£ãäœçœ® ã§ããã«ãŒããæåŸãŸã§åãã®ã§ãpos ã¯èŠã€ãããã³ã«äžæžããããåŸã®äœçœ®ãæ®ãããã§ãã
ãµã€ããæ¢ãããšèšã£ãããæåã«èŠã€ãã£ãäœçœ® ãã»ããã¯ãã§ããããã§ã«èŠã€ãã£ãŠãããïŒpos ã -1 ã§ãªãã£ããïŒãããäžæžãããªãããšããæ¡ä»¶ãã第04åã§åŠãã è«çæŒç®å and ã§ä»ãè¶³ããŸãã
numbers = [4, 2, 7, 5, 7]
target = 7
pos = -1
for j in range(0, len(numbers)):
if pos == -1 and numbers[j] == target: # ãŸã èŠã€ãã£ãŠããªãããã€çãã
pos = j
print("äœçœ®:", pos)
å®è¡çµæ
äœçœ®: 2
ããã©ã¯æåã® 7 ã®äœçœ®ïŒ2ïŒãåºãŸãããpos == -1 and ... ã®ããã«ãããŸã èŠã€ãã£ãŠããªãããæ¡ä»¶ã«è¶³ããŠãèŠã€ãã£ãåŸã¯äœãããªãââããã1 ç« ã§ãµãããæ¢çŽ¢ãªãã§ã¯ã®æžãæ¹ã§ããäžã®å³ã¯ããã®æµãããããŒãã£ãŒãã§è¡šãããã®ã§ãã
ããŸã: break æã䜿ã¶
breakæã䜿ããšãèŠã€ãã£ããããã§foræãæããããšããæäœãã§ããŸããbreakæã¯ for æãéäžã§æããåœä»€ã§ããbreakæã䜿ããšãposã®åæå€ã -1 ã«ããå¿ èŠã¯ãªããposãèŠã€ãã£ãäœçœ®ã§äžæžãããã ãã§æžã¿ãŸããbreakæã䜿ããšãæåã«èŠã€ãã£ãäœçœ®ãè¿ãã ãã§ãªããæ¯èŒåæ°ãæžããããšãã§ããŸãã
äŸïŒ
for i in range(len(numbers)):
if numbers[i] == target: # èŠã€ãã£ãã
pos = i # äœçœ®ãèšé²
break # for æãæãã
èå³ã®ããæ¹ã¯ãbreak æã䜿ã£ãç·åœ¢æ¢çŽ¢ã®ã³ãŒããæžããŠã¿ããšè¯ãã§ãããã
2.3 ã¢ã«ãŽãªãºã ãšããŠèªã¶
ããŸæžããç·åœ¢æ¢çŽ¢ïŒæåã®äœçœ®ïŒããæé ã®åœ¢ã«ãŸãšããŠãããŸãã
- ãªã¹ã
numbersãšæ¢ãå€targetãçšæãããèŠã€ãã£ãäœçœ®posã -1 ãšããäœçœ®jã 0 ãšãããposã -1 ã§ãnumbers[j]ãtargetãšçãããªãã°ãposãjãšãããjã1 å¢ãããjããªã¹ãã®é·ãããå°ãããã°ãæé 2 ãžæ»ããposãåºåããã
第11åã®èŠåã§èªããšãäžã®ããã«å¯Ÿå¿ããŸãã
| æé | èŠã€ããèšè | ã³ãŒãã§ã®åœ¢ |
|---|---|---|
| 1 | ïŒå€æ°ã®çšæïŒ | numbers = ... ãš target = ... ãš pos = -1 |
| 1 & 3 | j ã 0 ãšãã1 å¢ãããŠãæé 2 ãžæ»ãã |
for j in range(0, len(numbers)): |
| 2 | ããã§ãããªãã°ã | if pos == -1 and numbers[j] == target: ãš pos = j |
| 4 | åºåãã | print(pos) |
æé 2 ã®ãpos ã -1 ã§ãããªãã°ãã®ããã«ãæ¡ä»¶ã2 ã€éãªã£ãããªãã°ãã¯ãand ã§1 ã€ã® if æ ã«ãªããŸãããã®èªã¿æ¹ãèŠããŠãããŠãã ããã
3. æ¢çŽ¢ã®æé: æ¯èŒåæ°Â¶
3.1 èŠã€ãã£ãåŸã¯æ¯ã¹ãªã¶
第11åãšåãããã«ãæ¯èŒåæ° ãæ°ããŠæ¢çŽ¢ã®æéãæž¬ããŸããããã§ã2.2 ã® and ã®æ¡ä»¶ã 2 ã€ã® if æã«åã㊠æžãçŽããŸããæå³ã¯åãã§ãããåãããšãå€åŽã® if ãšå
åŽã® if ã®ããã ãã«ãæ°ãã1 è¡ãå·®ã蟌ããããã«ãªããŸãã
numbers = [4, 2, 7, 5, 7]
target = 7
pos = -1
compare_count = 0 # target ãšæ¯ã¹ãåæ°
for j in range(0, len(numbers)):
if pos == -1: # ãŸã èŠã€ãã£ãŠããªããšãã ã
compare_count = compare_count + 1 # æ¯ã¹ãçŽåã«æ°ãã
if numbers[j] == target: # target ãšæ¯ã¹ã
pos = j
print("äœçœ®:", pos)
print("æ¯èŒåæ°:", compare_count)
å®è¡çµæ
äœçœ®: 2
æ¯èŒåæ°: 3
å€åŽã® if pos == -1: ã¯ãèŠã€ãã£ãåŸã®åšåããŸãããšé£ã°ãéçª ã®åããããŠããŸãïŒãã®è³æã§ã¯ ã¬ãŒã ãšåŒã³ãŸãïŒã7 ã¯2 çªç®ã§èŠã€ããã®ã§ãæ¯ã¹ãã®ã¯ 0ã»1ã»2 çªç®ã®3 åã ãã3 çªç®ä»¥éã¯ã¬ãŒãã«æ¢ããããŠãããæ¯ã¹ãŠããŸãããäžã®å³ã§ãã¬ãŒãã® false ã®ç·ãæ¬äœãé£ã°ããŠæ¬¡ã®åšåãžé²ãæµãã確ãããŠãã ããã
target ãããããå€ããŠå®è¡ããŠãã ããã
target = 4ïŒå é ã«ããïŒâ æ¯èŒã¯ 1 åtarget = 5ïŒåŸãã®æ¹ã«ããïŒâ æ¯èŒã¯ 4 åtarget = 3ïŒç¡ãïŒâ æ¯èŒã¯ 5 åïŒæåŸãŸã§èª¿ã¹ãªããšãç¡ãããšã¯èšãåããŸããïŒ
target ã®å Žæã«ãã£ãŠæéãå€ããããšããã®ãç·åœ¢æ¢çŽ¢ã®ç¹åŸŽã§ãããªã¹ãã n åãªããéãè¯ããã° 1 åãææª n åããªã¹ãã 1000 åã»100äž åãšå€§ãããªããšããã®ãææª n åããéãã®ãããã£ãŠããŸãã
4. äºåæ¢çŽ¢Â¶
4.1 åºæ¬çãªèãæ¹Â¶
çŽã®èŸæžã§ãæ¢çŽ¢ããšããåèªãåŒãããšãèããŠã¿ãŸãããã ãã®ãšãå é ã®ããããã1 ããŒãžãã€ããã人ã¯ããŸããã çãäžããããéããŠãç®åœãŠããåãåŸãããèŠãŠãæ¢ãç¯å²ãååã«çµã ã¯ãã§ãã ããããã®ãŸãŸã¢ã«ãŽãªãºã ã«ããã®ã äºåæ¢çŽ¢ ã§ãã
äºåæ¢çŽ¢ã«ã¯ã倧äºãªåæã1 ã€ãããŸãããªã¹ããæé ã«æŽåæžã¿ã§ããããš ã§ãã æŽåãããŠãããããããçãäžã®å€ãšæ¯ã¹ãã ãã§ãtarget ã¯å·Šååã«ã¯ãªãããªã©ãšãèŠãŠãããªãååããŸãšããŠæšãŠããã ã®ã§ãã èŸæžã®äŸãåãã§ãã èŸæžã¯æŽåãããŠãããããããçãäžã®ããŒãžãéããŠãç®åœãŠã®åèªã¯åãåŸãããã倿ã§ããã®ã§ãã 第11åã§åŠãã æŽåã¯ããã®äºåæ¢çŽ¢ã®äžããããã§ããããŸãã
ãã®ç« ã§ã¯ãŸãããååã«çµããªããæ¢ãããšããåãã æ¢çŽ¢æš ãšããæŠå¿µã䜿ã£ãŠãç®ã§çè§£ããŠããïŒ4.2ã4.3ïŒãããã Python ã®ã³ãŒãã«èœãšããŸãïŒ4.4 以éïŒã
4.2 ããŒã¿ãæšã«ããïŒæ¢çŽ¢æšïŒÂ¶
æŽåæžã¿ã®ãªã¹ã numbers = [1, 2, 4, 5, 7, 8, 9] ãäŸã«ããçãäžãšæ¯ã¹ãŠååã«çµãããšã㫠調ã¹ãå¯èœæ§ã®ããå Žæ ããå
šéšæãåºããŠã¿ãŸãã
- æåã«èª¿ã¹ãã®ã¯ãå¿
ã å
šäœã®çãäžïŒäœçœ® 3 ã®
5ïŒã§ããããããã¡ã°ãäžã«çœ®ããŸãã
[1, 2, 4, 5, 7, 8, 9] 5ããå°ããåŽã«çµã£ãããæ¬¡ã«èª¿ã¹ãã®ã¯ å·Šåå[1, 2, 4]ã®çãäžïŒäœçœ® 1 ã®2ïŒã§ãã
[1, 2, 4]
倧ããåŽã«çµã£ãã å³åå[7, 8, 9]ã®çãäžïŒäœçœ® 5 ã®8ïŒã§ãã
[7, 8, 9]
ãã®2 ã€ãã5ããæã䌞ã°ããŠå·Šäžãšå³äžã«çœ®ããŸãã- ããã«ãååã®ååãâŠãšç¹°ãè¿ããšãæåŸã¯1 åã ãã®ç¯å²ïŒäœçœ® 0ã»2ã»4ã»6ïŒã䞊ãã§çµãããŸãã
ã§ãããã£ãå³ã¯ãæåãããã圢ãã æš ãšåŒã°ããŸããäžäžéãã®æšã«èŠç«ãŠãŠããã¡ã°ãäžã æ ¹ããã¡ã°ãäžã è ãšåŒã³ãŸããç¹ã«ãã®å³ã¯ãäºåæ¢çŽ¢ã調ã¹ãå Žæãå šéšäžŠã¹ããã®ãªã®ã§ããã®è³æã§ã¯ æ¢çŽ¢æš ãšåŒã³ãŸãããªã¹ãã®7 åã®èŠçŽ ããã©ããäžžãšããŠ1 åãã€çŸããŠããããšã確ãããŠãã ãããæŽåæžã¿ã®ãªã¹ãã¯ããã€ã§ããã®åœ¢ã®æšã«èŠç«ãŠãããŸãã
ãªãããã®æšã¯ããã°ã©ã ã®ããŒã¿ãšããŠäœããã®ã§ã¯ãããŸãããé ã®äžïŒçŽã®äžïŒã§ãªã¹ããããèŠç«ãŠãããšãã èãæ¹ã®å³ ã§ããããã°ã©ã ã§ã©ã衚ããã¯ã4.4 ã§èª¬æããŸãã
4.3 æšã®èªã¿è§£ãæ¹Â¶
æ¢çŽ¢æšãã§ããŠããŸãã°ãæ¢ãæé ã¯ãæ ¹ããäžãžãã©ããã ãã§ããã«ãŒã«ã¯3 ã€ã§ãã
- ããŸç«ã£ãŠããäžžã®å€ãš
targetãæ¯ã¹ããçãããã°çºèŠïŒãã®äžžã®äœçœ®ãçãïŒã targetã®ã»ãã å°ãããã°å·Šã®æ ãžã倧ãããã°å³ã®æ ãžäžããã- äžãããæ¹åã« æãç¡ããã°ïŒèãŸã§æ¥ãŠããŸã£ããïŒããªã¹ãã« ç¡ã ãšåããã
ããšãã° 7 ãæ¢ããšãæ ¹ã® 5 ãšæ¯ã¹ãŠïŒ7 ã®ã»ãã倧ããã®ã§å³ãžïŒã次㮠8 ãšæ¯ã¹ãŠïŒå°ããã®ã§å·ŠãžïŒããã¡ã°ãäžã® 7 ãšæ¯ã¹ãŠçºèŠãæ¯èŒ3 å ã§ãããã®éããããäžã®å³ã®ãªã¬ã³ãžè²ã§ãã
ç¡ãå€ã§ã詊ããŸãã3 ãæ¢ããšã5ïŒå°ããã®ã§å·ŠãžïŒâ 2ïŒå€§ããã®ã§å³ãžïŒâ 4ïŒå°ããã®ã§å·ŠãžâŠæãç¡ãïŒãæ¯èŒ3 å ã§ãç¡ãããšèšãåããŸããæã§å³ããã©ã£ãŠç¢ºãããŠãã ããã
ãã®æšãããäºåæ¢çŽ¢ã®æ§è³ªã3 ã€èªã¿åããŸãã
- ã©ããª
targetãæ¢ããŠãããã©ãéããã¯ æ ¹ããäžãžã®1 æ¬é ã§ãã - æ¯èŒåæ°ã¯ããã©ã£ãæ®µã®æ°ããªã®ã§ãå€ããŠãæšã®æ®µæ°ïŒé«ãïŒãŸã§ ããããããŸããã7 åã®ãªã¹ããªã3 段ã§ãã
- 1 段äžããããšã«äžžã®æ°ã¯2 åã«å¢ããŸããè£è¿ããšããªã¹ããåã® 15 åã«ãªã£ãŠã 段ã¯1 ã€å¢ããã ã ã§ããã1 忝ã¹ãããšã«ç¯å²ãååã«ãªãããããã®æšã®åœ¢ãšããŠèŠããŠãããŠãã ããã
4.4 æšã®æ¢çŽ¢çµè·¯ã low ãš high ã§å®è£ ãã¶
ããã§ã¯ããæšãæ ¹ãããã©ããã Python ã«ããŸããæšã®å³ãããŒã¿ãšããŠäœãå¿
èŠã¯ãããŸãããæšã®ã©ã®äžžãããã®ãšãæ®ã£ãŠããç¯å²ã®ãçãäžãã ã£ãããšãæãåºããŠãã ãããã€ãŸããæ®ã£ãŠããç¯å²ããèŠããŠããã°ãããŸç«ã£ãŠããäžžã®äœçœ®ã¯èšç®ã§åºããŸããç¯å²ã¯ 巊端 low ãš å³ç«¯ high ã®2 ã€ã®å€æ°ã§è¡šããŸããæå㯠low = 0ãhigh = n - 1 ã§ãªã¹ãå
šäœã®ç¯å²ã衚ããŸããããŸç«ã£ãŠããäžžã®äœçœ®ã¯ mid = (low + high) // 2 ã§ãïŒ// ã¯ç¬¬02åã®æŽæ°é€ç®ã§ããå°æ°ãåãæšãŠãŸãïŒã
æšã®æ¢çŽ¢çµè·¯ãšã³ãŒãã¯ã次ã®ããã«å¯Ÿå¿ããŸãã
| æšã®æ¢çŽ¢çµè·¯ïŒ4.3 ã®ã«ãŒã«ïŒ | ã³ãŒãã§ã®åœ¢ |
|---|---|
| æ ¹ããå§ãã | low = 0 ãš high = n - 1ïŒç¯å²ã¯ãªã¹ãå
šäœïŒ[1low, 2, 4, 5, 7, 8, 9high] |
| ããŸç«ã£ãŠããäžž | mid = (low + high) // 2ïŒç¯å²ã®çãäžïŒ[1low, 2, 4, 5mid, 7, 8, 9high] |
| çãã â çºèŠ | pos = mid |
| å°ãã â å·Šã®æãž | high = mid - 1ïŒç¯å²ãå·Šååã«çµãïŒ[1low, 2, 4high, 5, 7, 8, 9] |
| 倧ãã â å³ã®æãž | low = mid + 1ïŒç¯å²ãå³ååã«çµãïŒ[1, 2, 4, 5, 7low, 8, 9high] |
| æãç¡ã â ãç¡ãã | low ã high ãè¶
ããïŒç¯å²ã空ã«ãªãïŒ |
ããããµãŸããŠãäºåæ¢çŽ¢ãã¢ã«ãŽãªãºã ïŒæé ïŒãšããŠæžããŸããä»åãã¡ã°ãäžèº«ã®ããæé ã§ãããã£ããèªãã§ãã ããã
- æé ã«æŽåããããªã¹ã
numbersãçšæãããã®é·ããnãšãããæ¢ãå€targetãçšæãããlowã 0ãhighãn - 1ãposã -1ãkã 0 ãšãããlowãhigh以äžãªãã°ãæé 3 ãžé²ããããã§ãªããªãã°ãæé 7 ãžé²ããmidã(low + high) // 2ãšãããnumbers[mid]ãtargetãšçãããªãã°ãposãmidãlowãhigh + 1ãšããŠãæé 7 ãžé²ããããã§ãªããªãã°ãæé 5 ãžé²ããnumbers[mid]ãtargetããå°ãããªãã°ãlowãmid + 1ãšããŠãæé 7 ãžé²ããããã§ãªããªãã°ãæé 6 ãžé²ããhighãmid - 1ãšãããkã1 å¢ãããkãnããå°ãããã°ãæé 2 ãžæ»ããposãåºåããã
æé ã®æžãæ¹ã1 ã€å¢ããŠããŸãããæé â¯ãžé²ããã¯ãããã ã®æé ãé£ã°ããŠå ãžè¡ãåå³ã§ãïŒãæ»ãããç¹°ãè¿ãã®åå³ã ã£ãã®ã«å¯Ÿãããé²ããã¯æåããã®åå³ã§ãïŒãæé 4ã6 ã®ããã«ãããªãã°ãâŠããŠæé 7 ãžé²ããããã§ãªããªãã°ãæ¬¡ã®æé ãžé²ãããé£ãªã£ãŠãããšããã¯ãäžããé ã«æ¡ä»¶ã調ã¹ãŠãæåã«æãç«ã£ã1 ã€ã ããè¡ããã€ãŸã if-elif-elseïŒç¬¬03åïŒãã®ãã®ã§ãã
第11åã®èŠåãšåãããŠèªã¿ãŸãã
| æé | èŠã€ããèšè | ã³ãŒãã§ã®åœ¢ |
|---|---|---|
| 1 & 7 | k ã 0 ãšãã1 å¢ãããŠãæé 2 ãžæ»ãã |
for k in range(0, n): |
| 2 | ã以äžãªãã°æé 3 ãž/ããã§ãªããªãã°æé 7 ãžã | ã¬ãŒãã® if low <= high:ïŒ3 ç« ãšåãéçªïŒ |
| 4ã6 | ãããªãã°ãâŠããŠæé 7 ãžé²ããã®é£ãªã | if / elif / elseïŒç¬¬03åïŒ |
ãã€ã³ãã¯2 ã€ãããŸãã
for k in range(0, n):ã¯ãå®å šãªäžéããæšããã©ãã®ã¯å€ããŠã段æ°ãŸã§ïŒ7 åãªã3 段ïŒã§ãããnååããŠããã°ç¢ºå®ã«è¶³ããŸããæ©ãçµãã£ãããšã®æ®ãã®åšåã¯ãã¬ãŒãïŒlow <= highã falseïŒãå šéšé£ã°ããŸãã3 ç« ã®ãèŠã€ãã£ãåŸã¯æ¯ã¹ãªãããšåã仿ãã§ãã- èŠã€ãã£ãã
low = high + 1ãšãããç¯å²ããããšç©ºã«ããããšã§ã以éã®åšåã§ã¯äœãèµ·ããªããªããŸãïŒãæ¢çŽ¢ãçµãããã®åå³ã§ãïŒã
numbers = [1, 2, 4, 5, 7, 8, 9] # æé ã«æŽåæžã¿ã§ããããš!
target = 7
n = len(numbers)
low = 0 # æ¢ãç¯å²ã®å·Šç«¯
high = n - 1 # æ¢ãç¯å²ã®å³ç«¯
pos = -1
for k in range(0, n): # å€ããŠã n åã§å¿
ãçµãã(å®å
šãªäžé)
if low <= high: # ã¬ãŒã: ç¯å²ãæ®ã£ãŠãããšãã ã
mid = (low + high) // 2 # çãäžã®äœçœ®
if numbers[mid] == target:
pos = mid # èŠã€ãã£ã
low = high + 1 # ç¯å²ã空ã«ããŠæ¢çŽ¢ãçµãã
elif numbers[mid] < target:
low = mid + 1 # çãäžããå·ŠãæšãŠã
else:
high = mid - 1 # çãäžããå³ãæšãŠã
print("äœçœ®:", pos)
å®è¡çµæ
äœçœ®: 4
7 ã®äœçœ®ïŒ4ïŒãåºãŸããã4.3 ã§æšããã©ã£ããšããã®çãã§ããäžã®å³ã¯ããã®æµãããããŒãã£ãŒãã§è¡šãããã®ã§ããã²ã圢ã4 ã€ïŒã«ãŒã/ã¬ãŒã/çããã/å°ãããïŒäžŠã¶ãä»åãã¡ã°ã倧ããªå³ã§ãããçããããã® false ããå°ãããããžæµãèœã¡ã圢ããã³ãŒãã® if-elif-else ã«å¯Ÿå¿ããŸãã
4.5 åãã芳å¯ãã¶
æ¬åœã«ãæšã®éããã®ãšãããã«çµããŠããã®ãããç®ã§ç¢ºãããŸããã¬ãŒãã®äžã«ã調ã¹ãäœçœ®ãšç¯å²ãåºåããè¡ãè¶³ããŸãïŒç¬¬11åã®ããã¹ããšã®åºåããšåãã芳å¯çšã®è¡ã§ãïŒã
numbers = [1, 2, 4, 5, 7, 8, 9]
target = 7
n = len(numbers)
low = 0
high = n - 1
pos = -1
for k in range(0, n):
if low <= high:
mid = (low + high) // 2
print("調ã¹ãäœçœ®:", mid, "/ ç¯å²:", low, "ã", high) # 芳å¯çš
if numbers[mid] == target:
pos = mid
low = high + 1
elif numbers[mid] < target:
low = mid + 1
else:
high = mid - 1
print("äœçœ®:", pos)
å®è¡çµæ
調ã¹ãäœçœ®: 3 / ç¯å²: 0 ã 6
調ã¹ãäœçœ®: 5 / ç¯å²: 4 ã 6
調ã¹ãäœçœ®: 4 / ç¯å²: 4 ã 4
äœçœ®: 4
1 åç®ã¯7 åå
šäœïŒ0ã6ïŒã®çãäž 3 ã調ã¹ãnumbers[3]ïŒ5ïŒã¯ 7 ããå°ããã®ã§ãç¯å²ãå³ååïŒ4ã6ïŒã«çµãããŸããã2 åç®ã¯ãã®çãäž 5 ã調ã¹ãnumbers[5]ïŒ8ïŒã¯ 7 ãã倧ããã®ã§ãç¯å²ãå·ŠïŒ4ã4ïŒã«çµãããŸããã3 åç®ã§ãã®çãäž 4 ã調ã¹ãŠãèŠã€ãããŸãããæ¯èŒã¯ 3 åïŒæšã®æ®µæ°ã¶ãïŒã§æžãã§ããŸããã調ã¹ãäœçœ®ãã® 3 â 5 â 4 ã¯ã4.3 ã®å³ã®ãªã¬ã³ãžã®éããïŒäœçœ® 3 ã® 5 â äœçœ® 5 ã® 8 â äœçœ® 4 ã® 7ïŒãã®ãã®ã§ããã³ãŒãã¯æšã®å³ãæã£ãŠããªãã®ã«ãlow ãš high ã ãã§åãéããããã©ããŠããŸãã
target ã 1 ã 9ïŒç«¯ã®å€ïŒã3ïŒç¡ãå€ïŒã«å€ããŠãç¯å²ã®çµããæ¹ã芳å¯ããŠãã ããã
4.6 æ¯èŒåæ°ãæ°ãã¶
ãå€ããŠãæšã®æ®µæ°ãŸã§ãããå®éã«æ°ããŠç¢ºãããŸãã3 ç« ãšåãããã«æ°ããŸããã¬ãŒãã®äžã« compare_count = compare_count + 1 ã眮ãã ãã§ãïŒç¯å²ãæ®ã£ãŠããŠãå®éã«æ¯ã¹ãåšåã ãæ°ããŸãïŒã
numbers = [1, 2, 4, 5, 7, 8, 9]
target = 3 # ç¡ãå€(ãã¡ã°ãæéã®ãããå Žå)
n = len(numbers)
low = 0
high = n - 1
pos = -1
compare_count = 0
for k in range(0, n):
if low <= high:
mid = (low + high) // 2
compare_count = compare_count + 1
if numbers[mid] == target:
pos = mid
low = high + 1
elif numbers[mid] < target:
low = mid + 1
else:
high = mid - 1
print("äœçœ®:", pos)
print("æ¯èŒåæ°:", compare_count)
å®è¡çµæ
äœçœ®: -1
æ¯èŒåæ°: 3
ç¡ãå€ãæ¢ãã®ã¯ãç·åœ¢æ¢çŽ¢ãªã 7 åïŒå
šéšïŒæ¯ã¹ãææªã®å Žåã§ãããäºåæ¢çŽ¢ã¯ 3 å ã§ãç¡ãããšèšãåããŸãã1 忝ã¹ãããšã«ç¯å²ãã»ãŒååã«ãªãã®ã§ã7 å â 3 å â 1 å â 0 åãšã3 åã§ç¯å²ãå°œããããã§ããããã¯ã4.3 ã§ 3 ãæ¢ããŠãç¡ãããšåãã£ãéããïŒ5 â 2 â 4 ã®3 段ïŒãã®ãã®ã§ãã
5. 倧ããªãªã¹ãã§æ¯ã¹ã¶
7 åã®ãªã¹ãã§ã¯ã7 åãš3 åãã®å·®ã§ããããã®å·®ã¯ãªã¹ãã倧ãããªãã»ã©åçã«éããŸãã1000 åã®ãªã¹ãã§ç¢ºãããŸãããªã¹ãã¯ç¬¬06åã§åŠãã append ã®èç©ã§äœããŸãïŒ0, 2, 4, ... ãš2 ãã€å¢ãããæé ã®1000 åïŒã
# 0, 2, 4, ..., 1998 ã®1000 åã®æé ãªã¹ããäœã
numbers = []
for i in range(0, 1000):
numbers.append(i * 2)
target = 1998 # ãã¡ã°ãåŸãã®å€(ç·åœ¢æ¢çŽ¢ã«ã¯ææªã®å Žå)
n = len(numbers)
# --- ç·åœ¢æ¢çŽ¢(3 ç« ãšåã) ---
pos = -1
compare_count = 0
for j in range(0, n):
if pos == -1:
compare_count = compare_count + 1
if numbers[j] == target:
pos = j
print("ç·åœ¢æ¢çŽ¢: äœçœ®", pos, "/ æ¯èŒ", compare_count, "å")
# --- äºåæ¢çŽ¢(4 ç« ãšåã) ---
low = 0
high = n - 1
pos = -1
compare_count = 0
for k in range(0, n):
if low <= high:
mid = (low + high) // 2
compare_count = compare_count + 1
if numbers[mid] == target:
pos = mid
low = high + 1
elif numbers[mid] < target:
low = mid + 1
else:
high = mid - 1
print("äºåæ¢çŽ¢: äœçœ®", pos, "/ æ¯èŒ", compare_count, "å")
å®è¡çµæ
ç·åœ¢æ¢çŽ¢: äœçœ® 999 / æ¯èŒ 1000 å
äºåæ¢çŽ¢: äœçœ® 999 / æ¯èŒ 10 å
åãå€ãæ¢ããŠãç·åœ¢æ¢çŽ¢ã¯ 1000 åãäºåæ¢çŽ¢ã¯ 10 å ã§ãã1 åããšã«ç¯å²ãååã«ãªãã®ã§ã1000 â 500 â 250 â ... â 1 ãšã10 åã»ã©ã§1 åãŸã§çµããããã§ãïŒ2 ã10 åããããš 1024ã4.2 ã®æ¢çŽ¢æšã§èšãã°ãçŽ10 æ®µã®æšã«ãªããŸãïŒããªã¹ãã 100äž åã«ãªã£ãŠããäºåæ¢çŽ¢ã¯ 20 åã»ã©ã§æžã¿ãŸãã
ãã®ãååã«ã§ããåæ°ãã«ã¯ãååãä»ããŠããŸãã2 ãäœåãããã n ã«ãªããïŒ= n ã1 ã«ãªããŸã§ååã«ã§ããåæ°ïŒããæ°åŠã§ã¯ logâ nïŒãã°ïŒ ãšæžããŸããæ¢çŽ¢æšã®æ®µæ°ãšåããã®ã§ããæ¢ãæé㯠ãã¡ã°ãéã®æªãå ŽåïŒææªã®å ŽåïŒ ã§èŠç©ããã®ããµã€ãã§ãç·åœ¢æ¢çŽ¢ã¯ n åãäºåæ¢çŽ¢ã¯çŽ $\log_2 n$ åããšèšã衚ããŸãïŒn ãã¡ããã©2 ã®ããç®ã§äœããæ°ã§ãªããŠãããããã®åæ°ãšããŠäœ¿ããŸãïŒã
ãªã¹ãã®å€§ãã n |
ç·åœ¢æ¢çŽ¢ïŒææª = n åïŒ |
äºåæ¢çŽ¢ïŒææª â $\log_2 n$ åïŒ |
|---|---|---|
| 7 | 7 å | 3 å |
| 1000 | 1000 å | 10 å |
| 100äž | 100äž å | 20 å |
第11åã§åŠãã ãã¢ã«ãŽãªãºã ã®è¯ãæªãã¯æäœã®åæ°ã§æ¯ã¹ããã®ããããæ¢çŽ¢çã§ããåæ°ã1 åããã¿ã§æ£ç¢ºã«èŠããå¿
èŠã¯ãããŸããã倧äºãªã®ã¯ãn ã倧ãããªã£ããšãã« n ã«æ¯äŸããŠå¢ããã®ãã$\log_2 n$ ã§ããå¢ããªãã®ã ãšãã å¢ãæ¹ã®éã ã§ãæéã®èŠç©ããã¯ãã®ããã倧ãŸãã§ååã§ããåãåé¡ã§ããã¢ã«ãŽãªãºã ãã ãã§æéãæ¡éãã«å€ãããŸãããã ãäºåæ¢çŽ¢ã䜿ããã®ã¯ æŽåæžã¿ã®ãªã¹ãã ã ã§ããæŽåãããŠããªããªã¹ãã«ã¯ç·åœ¢æ¢çŽ¢ãæŽåæžã¿ã®ãªã¹ãã«ã¯äºåæ¢çŽ¢ããšãã䜿ãåãã«ãªããŸãã
6. æŽåããŠããæ¢ã¶
ãã©ãã©ã®ãªã¹ãã§äºåæ¢çŽ¢ã䜿ããããšãã¯ãå ã«æŽåããŠããæ¢ã ãŸãã第11åã®ããã«ãœãŒããšãä»åã®äºåæ¢çŽ¢ãã€ãªããã ãã§ãã
numbers = [8, 3, 6, 1, 9] # ãã©ãã©ã®ãªã¹ã
target = 8
n = len(numbers)
# --- ãŸãæŽåãã(第11åã®ããã«ãœãŒãã»æé ) ---
for i in range(0, n - 1):
for j in range(0, n - 1 - i):
if numbers[j] > numbers[j + 1]:
tmp = numbers[j]
numbers[j] = numbers[j + 1]
numbers[j + 1] = tmp
print("æŽååŸ:", numbers)
# --- æŽåæžã¿ã«ãªã£ãã®ã§ãäºåæ¢çŽ¢ã§æ¢ã ---
low = 0
high = n - 1
pos = -1
for k in range(0, n):
if low <= high:
mid = (low + high) // 2
if numbers[mid] == target:
pos = mid
low = high + 1
elif numbers[mid] < target:
low = mid + 1
else:
high = mid - 1
print("target ã®äœçœ®:", pos)
å®è¡çµæ
æŽååŸ: [1, 3, 6, 8, 9]
target ã®äœçœ®: 3
1 ã€æ³šæããããŸããåºåã® 3 㯠æŽååŸã®ãªã¹ãã§ã®äœçœ® ã§ãã8 ã¯å
ã®ãªã¹ãã§ã¯ 0 çªç®ã«ãããŸããããæŽåã§èŠçŽ ã®äœçœ®ãå€ãããŸãããå
ã®ãªã¹ãã§ã®äœçœ®ãç¥ãããåé¡ã§ã¯ãæŽåããã«ç·åœ¢æ¢çŽ¢ã䜿ããŸãããå
ã®äœçœ®ãã»ãããªãç·åœ¢æ¢çŽ¢ãéãæ¢ããããªãæŽåããŠäºåæ¢çŽ¢ãââç®çã«åãããŠäœ¿ãåããŠãã ããã
ãæŽåïŒç¬¬11åïŒãšæ¢çŽ¢ïŒä»åïŒã¯ã»ããã§äœ¿ããããââ2 ååã®å 容ãããã§ã€ãªãããŸããã
7. ãããŒãã£ãŒãã§æµããã€ãã¶
ãã®è³æã®å³ã¯ããããŸã§ã©ãã æµããç®ã§ç¢ºãããããã®ãã³ã ã§ããèªã¿æ¹ã®ãã€ã³ãã¯æ¬¡ã®2 ã€ã§ãã
- ã¬ãŒãã®ã²ã圢: 3 ç« ãš4 ç« ã®å³ã§ã¯ãã«ãŒãã®äžã«ã¬ãŒãïŒ
pos == -1ãlow <= highïŒã®ã²ã圢ããããfalse ã®ç·ãæ¬äœãäžžããšé£ã°ããŠæ¬¡ã®åšåãžé²ã¿ãŸãããèŠã€ãã£ãåŸã¯äœãããªããããå³ã§ã¯ãæ¬äœãéããªãç·ããšããŠèŠããŸãã - äºåæ¢çŽ¢ã®ã²ã圢ã¯4 ã€: ã«ãŒã/ã¬ãŒã/çããã/å°ãããããçããããã® false ããå°ãããããžæµãèœã¡ã圢ããã³ãŒãã® if-elif-else ã«å¯Ÿå¿ããŸãããããŒãã£ãŒããã1 åšã®åŠçã®æµããã衚ãã®ã«å¯Ÿãã4.2ã4.3 ã®æ¢çŽ¢æšã¯ãåšããŸããã 調ã¹ãé ãã衚ããŸããåãäºåæ¢çŽ¢ã®ãå¥ã®é¢ãèŠãå³ã§ãã
ãããŠä»åã¯ã課é¡ã«ã€ã㊠倧ããªå€æŽ ã1 ã€ãããŸããææ¥åŸã®èª²é¡ã¯ãPython ã§ã¯ãªãããããŒãã£ãŒãããŒã«ã§ãããŒãã£ãŒããçµãã§æåº ããŸãïŒå šåïŒã䜿ãã®ã¯ãã®ææ¥ã®ããã® ãããŒãã£ãŒãããŒã«ïŒ https://moss-yk.com/tools/flowchart/ ïŒã§ãããã©ãŠã¶ã§éããŠããŒãã䞊ã¹ãç·ã§ã€ãªãããã®å Žã§å®è¡ããŠåºåã確ãããããŸãã第11åã®èª²é¡ã®çºå±åé¡ã§äœ¿ã£ããã®ãšåãããŒã«ã§ãïŒçºå±åé¡ããããªãã£ã人ãã課é¡ããŒãžã«äœ¿ãæ¹ãæžããŠããã®ã§å€§äžå€«ã§ãïŒã
ãããŒãã£ãŒãã§çµããšããããšã¯ãæé ã®æ§é ïŒã«ãŒãã»åå²ã»ã¬ãŒãïŒããã®ãŸãŸæåºç©ã«ãªã ãšããããšã§ãããã®è³æã®å³ãšã³ãŒããèŠæ¯ã¹ãŠã察å¿ãé ã«å ¥ããŠãããŠãã ããã
ãŸãšã¶
- æ¢çŽ¢ ã¯ããªã¹ãã®äžããç®åœãŠã®å€ïŒ
targetïŒãèŠã€ãåºãåŠçãèŠã€ãã£ãäœçœ®ã¯posã«å ¥ãã-1 ããèŠã€ãããªãã£ããã®åå³ ã«ããã - ç·åœ¢æ¢çŽ¢ ã¯å
é ããé ã«1 ã€ãã€æ¯ã¹ããæŽåãããŠããªããªã¹ãã«ã䜿ãããæ¯èŒåæ°ã¯ãéãè¯ããã° 1 åãææª
nåã - for æã¯éäžã§ãããããªãã®ã§ãã¬ãŒãïŒ
if pos == -1:ãªã©ã®éçªã® ifïŒã§ãèŠã€ãã£ãåŸã¯äœãããªãããäœããæ¯èŒåæ°ã¯ã¬ãŒãã®äžã§æ°ããã - äºåæ¢çŽ¢ 㯠æé ã«æŽåæžã¿ ã®ãªã¹ãå°çšãç¯å²ã
lowã»highã§æã¡ãçãäžmid = (low + high) // 2ãšæ¯ã¹ãŠç¯å²ãååã«çµããèŠã€ãã£ããlow = high + 1ã§ç¯å²ã空ã«ããŠçµãããã«ãŒãã¯for k in range(0, n):ã®ãå®å šãªäžéãã§åãã - äºåæ¢çŽ¢ã調ã¹ãäœçœ®ã®åããéãå šéšæãããã®ã æ¢çŽ¢æšããã©ãã®ã¯æ ¹ããäžãžã®1 æ¬éã§ãæ¯èŒåæ°ã¯å€ããŠãæšã®æ®µæ°ïŒé«ãïŒãŸã§ããã®åæ°ã¯ãååã«ã§ããåæ°ã= logâ nïŒæ¢çŽ¢æšã®æ®µæ°ïŒã§ã1000 åãªãçŽ 10 åã100äž åã§ãçŽ 20 åãæéã¯ææªã®å Žåã§å€§ãŸãã«èŠç©ããã°ååãæŽåæžã¿ãªãæ¡éãã«éãããã©ãã©ã®ãªã¹ã㯠æŽåããŠããæ¢ãïŒç¬¬11åãšã®ã€ãªããïŒã
- ææ¥åŸã®èª²é¡ã¯ããããŒãã£ãŒãããŒã«ïŒ https://moss-yk.com/tools/flowchart/ ïŒã§ãããŒãã£ãŒããçµãã§
.pflowãæåºããïŒè©³ããã¯èª²é¡ããŒãžïŒã
ä»åãã¡ã°ã身ã«ã€ããŠã»ããã®ã¯ããåãåé¡ã§ããã¢ã«ãŽãªãºã ãã ãã§æéãæ¡éãã«å€ããã ãšããæèŠãšãæé ãèªãã§æ§é ïŒã«ãŒãã»ã¬ãŒãã»åå²ïŒã«ç¿»èš³ããåã§ãã