ãå³è§£ãã¢ã«ãŽãªãºã ãšã¯ïŒåå¿è ãç¥ãã¹ãåºæ¬æŠå¿µ
ããã°ã©ãã³ã°ãåŠã¶äžã§é¿ããŠéããªããã¢ã«ãŽãªãºã ããšããèšèãããªãã ãé£ãããâŠããšæããæ¹ãå€ãã®ã§ã¯ãªãã§ããããïŒãã®èšäºã§ã¯ãã¢ã«ãŽãªãºã ãšã¯äœãããªãéèŠãªã®ãããããŠåºæ¬çãªã¢ã«ãŽãªãºã ã«ã€ããŠãå³è§£ã亀ããŠãããããã解説ããŸãã
ã¢ã«ãŽãªãºã ãšã¯ïŒ
ç°¡åã«èšããšâŠ
ã¢ã«ãŽãªãºã ãšã¯ãåé¡ã解決ããããã®æé ãæ¹æ³ã®ããšã§ããæçã®ã¬ã·ããçµã¿ç«ãŠèª¬ææžã®ãããªãã®ã§ãã¹ããããã€ã¹ãããã§ç®æšãéæããããã®éçã瀺ããŸãã
äŸãã°ããæèµ·ããŠããäŒç€Ÿã«è¡ããŸã§ããšããã·ã³ãã«ãªè¡åãã以äžã®ãããªã¢ã«ãŽãªãºã ã§è¡šçŸã§ããŸãïŒ
ã³ã³ãã¥ãŒã¿ããã°ã©ãã³ã°ã«ãããã¢ã«ãŽãªãºã ãåãèãæ¹ã§ããç¹å®ã®åé¡ã解決ããããã®ãæç¢ºã§é åºç«ãŠãããæé ã®éãŸããªã®ã§ãã
ã¢ã«ãŽãªãºã ã®ç¹åŸŽ
è¯ãã¢ã«ãŽãªãºã ã«ã¯ã以äžã®ãããªç¹åŸŽããããŸãïŒ
- æç¢ºæ§ïŒåã¹ããããæç¢ºã§ææ§ãããªã
- æéæ§ïŒå¿ ãçµäºããïŒç¡éã«ãŒãã«ãªããªãïŒ
- å ¥åïŒ0å以äžã®å ¥åãåãåã
- åºåïŒ1å以äžã®åºåãçæãã
- å¹çæ§ïŒãªãœãŒã¹ïŒæéã»ã¡ã¢ãªãªã©ïŒãå¹ççã«äœ¿çšãã
ãªãã¢ã«ãŽãªãºã ãéèŠãªã®ãïŒ
ã¢ã«ãŽãªãºã ãåŠã¶ããšã«ã¯ã以äžã®ãããªã¡ãªããããããŸãïŒ
1. åé¡è§£æ±ºèœåã®åäž
ã¢ã«ãŽãªãºã çæèã身ã«ã€ããããšã§ãè€éãªåé¡ãå°ããªéšåã«åè§£ããå¹ççã«è§£æ±ºããèœåãé€ãããŸããããã¯ããã°ã©ãã³ã°ã ãã§ãªããæ¥åžžçæŽ»ã®ããããå Žé¢ã§åœ¹ç«ã¡ãŸãã
2. å¹ççãªã³ãŒãã®äœæ
åãåé¡ã解決ããããã°ã©ã ã§ããã¢ã«ãŽãªãºã ã®éžæã«ãã£ãŠå®è¡é床ãã¡ã¢ãªäœ¿çšéã倧ããå€ãããŸããé©åãªã¢ã«ãŽãªãºã ãéžã¶ããšã§ãããå¹ççãªããã°ã©ã ãäœæã§ããŸãã
3. æè¡é¢æ¥ã§ã®è©äŸ¡ãã€ã³ã
å€ãã®ITäŒæ¥ã®æ¡çšé¢æ¥ã§ã¯ãã¢ã«ãŽãªãºã ã®ç¥èãåé¡è§£æ±ºèœåãè©äŸ¡ãããŸããåºæ¬çãªã¢ã«ãŽãªãºã ãçè§£ããŠããããšã¯ãå°±è·ã»è»¢è·ã®éã«å€§ããªã¢ããã³ããŒãžãšãªããŸãã
ã¢ã«ãŽãªãºã ã®è¡šçŸæ¹æ³
ã¢ã«ãŽãªãºã ã衚çŸããæ¹æ³ã¯ããã€ããããŸãããäž»ã«ä»¥äžã®3ã€ã䜿ãããŸãïŒ
1. èªç¶èšèªïŒæ¥æ¬èªãè±èªãªã©ïŒ
æãåºæ¬çãªè¡šçŸæ¹æ³ã§ãæ®æ®µäœ¿ã£ãŠããèšèã§ã¢ã«ãŽãªãºã ã説æããŸãã
äŸïŒãé åã®äžããæå€§å€ãèŠã€ããã«ã¯ããŸãæåã®èŠçŽ ãæå€§å€ãšããé åã®åèŠçŽ ãšæ¯èŒããŠããããã倧ããªå€ãèŠã€ãã£ããæå€§å€ãæŽæ°ããã
2. ãããŒãã£ãŒãïŒæµãå³ïŒ
ã¢ã«ãŽãªãºã ã®æµããèŠèŠçã«è¡šçŸããæ¹æ³ã§ããåŠçã®æµããäžç®ã§ããããããçè§£ãããããšããç¹åŸŽããããŸãã
äŸïŒæå€§å€ãèŠã€ããã¢ã«ãŽãªãºã ã®ãããŒãã£ãŒã
3. ç䌌ã³ãŒãïŒæ¬äŒŒèšèªïŒ
ããã°ã©ãã³ã°èšèªã«äŒŒã圢åŒã§æžãããããç¹å®ã®èšèªã®ææ³ã«çžãããªãèšè¿°æ¹æ³ã§ããã¢ã«ãŽãªãºã ã®æ¬è³ªã衚çŸãã€ã€ãå®è£ ã«è¿ã圢ã§èšè¿°ã§ããŸãã
äŸïŒæå€§å€ãèŠã€ããç䌌ã³ãŒã
function findMax(array):
if array is empty:
return null
max = array[0]
for i from 1 to array.length - 1:
if array[i] > max:
max = array[i]
return max
åºæ¬çãªã¢ã«ãŽãªãºã
ããããã¯ãããã°ã©ãã³ã°åå¿è ãç¥ã£ãŠããã¹ãåºæ¬çãªã¢ã«ãŽãªãºã ãããã€ã玹ä»ããŸãã
1. ç·åœ¢æ¢çŽ¢ïŒLinear SearchïŒ
é åã®äžããç¹å®ã®å€ãæ¢ãã·ã³ãã«ãªã¢ã«ãŽãªãºã ã§ããå é ããé çªã«åèŠçŽ ããã§ãã¯ããŠãããŸãã
å³è§£
ç䌌ã³ãŒã
function linearSearch(array, target):
for i from 0 to array.length - 1:
if array[i] equals target:
return i // èŠã€ãã£ãäœçœ®ãè¿ã
return -1 // èŠã€ãããªãã£ã
ç¹åŸŽ
- æéè€é床: O(n) - ææªã®å Žåãé åã®å šèŠçŽ ã調ã¹ãå¿ èŠããã
- 空éè€é床: O(1) - 远å ã®ã¡ã¢ãªãã»ãšãã©äœ¿çšããªã
- ã¡ãªãã: ã·ã³ãã«ã§å®è£ ã容æãé åããœãŒããããŠããªããŠã䜿ãã
- ãã¡ãªãã: 倧ããªé åã§ã¯å¹çãæªã
2. äºåæ¢çŽ¢ïŒBinary SearchïŒ
ãœãŒãæžã¿ã®é åã§äœ¿ããå¹ççãªæ¢çŽ¢ã¢ã«ãŽãªãºã ã§ããé åã®äžå€®ã®å€ãšæ¢ãããå€ãæ¯èŒããæ¢çŽ¢ç¯å²ãååã«çµã£ãŠãããŸãã
å³è§£
ããå°ãè€éãªäŸïŒ
ç䌌ã³ãŒã
function binarySearch(array, target):
left = 0
right = array.length - 1
while left <= right:
mid = (left + right) / 2
if array[mid] equals target:
return mid // èŠã€ãã£ãäœçœ®ãè¿ã
else if array[mid] < target:
left = mid + 1 // å³ååãæ¢çŽ¢
else:
right = mid - 1 // å·Šååãæ¢çŽ¢
return -1 // èŠã€ãããªãã£ã
ç¹åŸŽ
- æéè€é床: O(log n) - åã¹ãããã§æ¢çŽ¢ç¯å²ãååã«ãªã
- 空éè€é床: O(1) - 远å ã®ã¡ã¢ãªãã»ãšãã©äœ¿çšããªã
- ã¡ãªãã: 倧ããªé åã§ãå¹ççã«æ¢çŽ¢ã§ãã
- ãã¡ãªãã: é åããœãŒããããŠããå¿ èŠããã
3. ããã«ãœãŒãïŒBubble SortïŒ
æãåºæ¬çãªãœãŒãã¢ã«ãŽãªãºã ã®äžã€ã§ãã飿¥ããèŠçŽ ãæ¯èŒããå¿ èŠã«å¿ããŠäº€æããããšã§ãåŸã ã«å€§ããªå€ããæ³¡ãã®ããã«å³åŽã«ç§»åãããŠãããŸãã
å³è§£
ç䌌ã³ãŒã
function bubbleSort(array):
n = array.length
for i from 0 to n - 1:
for j from 0 to n - i - 1:
if array[j] > array[j + 1]:
// èŠçŽ ã亀æ
swap array[j] and array[j + 1]
return array
ç¹åŸŽ
- æéè€é床: O(n²) - äºéã«ãŒãã䜿çš
- 空éè€é床: O(1) - 远å ã®ã¡ã¢ãªãã»ãšãã©äœ¿çšããªã
- ã¡ãªãã: ã·ã³ãã«ã§å®è£ ã容æãå°ããªé åã§ã¯å¹çç
- ãã¡ãªãã: 倧ããªé åã§ã¯éåžžã«å¹çãæªã
4. ã¯ã€ãã¯ãœãŒãïŒQuick SortïŒ
ãåå²çµ±æ²»æ³ããçšããå¹ççãªãœãŒãã¢ã«ãŽãªãºã ã§ããããããïŒåºæºå€ïŒãéžã³ãããããå°ããèŠçŽ ãšå€§ããèŠçŽ ã«åå²ããååž°çã«ãœãŒãããŠãããŸãã
å³è§£
ç䌌ã³ãŒã
function quickSort(array, low, high):
if low < high:
// ãããããéžã³ãé
åãåå²
pivotIndex = partition(array, low, high)
// ããããã®å·ŠåŽããœãŒã
quickSort(array, low, pivotIndex - 1)
// ããããã®å³åŽããœãŒã
quickSort(array, pivotIndex + 1, high)
return array
function partition(array, low, high):
pivot = array[high] // æåŸã®èŠçŽ ããããããšããŠéžæ
i = low - 1
for j from low to high - 1:
if array[j] <= pivot:
i = i + 1
swap array[i] and array[j]
swap array[i + 1] and array[high]
return i + 1
ç¹åŸŽ
- æéè€é床: å¹³å O(n log n)ãææª O(n²)
- 空éè€é床: O(log n) - ååž°åŒã³åºãã®ããã®ã¹ã¿ãã¯é å
- ã¡ãªãã: å¹³åçã«ã¯éåžžã«å¹ççãå®çšçãªãœãŒãã¢ã«ãŽãªãºã
- ãã¡ãªãã: ææªã®å ŽåïŒæ¢ã«ãœãŒããããŠããé åãªã©ïŒã¯å¹çãæªã
5. ååž°ã¢ã«ãŽãªãºã ïŒRecursionïŒ
ååž°ãšã¯ã颿°ãèªåèªèº«ãåŒã³åºãææ³ã§ããå€ãã®åé¡ãç°¡æœã«è§£æ±ºã§ããŸãããçè§£ããã®ãå°ãé£ãããããããŸããã
äŸïŒéä¹ã®èšç®
éä¹ïŒn!ïŒã¯ã1ããnãŸã§ã®æŽæ°ã®ç©ã§ããäŸãã°ã5! = 5 à 4 à 3 à 2 à 1 = 120
ååž°ã䜿ã£ãéä¹ã®èšç®ã¯ä»¥äžã®ããã«è¡šçŸã§ããŸãïŒ
- 0! = 1 ïŒåºæ¬ã±ãŒã¹ïŒ
- n! = n à (n-1)! ïŒn > 0ã®å ŽåïŒ
å³è§£
ç䌌ã³ãŒã
function factorial(n):
// åºæ¬ã±ãŒã¹
if n equals 0 or n equals 1:
return 1
// ååž°ã±ãŒã¹
return n * factorial(n - 1)
ç¹åŸŽ
- ã¡ãªãã: è€éãªåé¡ãç°¡æœã«è¡šçŸã§ãã
- ãã¡ãªãã: ã¹ã¿ãã¯ãªãŒããŒãããŒã®å¯èœæ§ããããçè§£ãã«ããå Žåããã
ã¢ã«ãŽãªãºã ã®å¹çæ§
ã¢ã«ãŽãªãºã ã®å¹çæ§ãè©äŸ¡ããéãäž»ã«ä»¥äžã®2ã€ã®èгç¹ããèããŸãïŒ
1. æéè€é床ïŒTime ComplexityïŒ
ã¢ã«ãŽãªãºã ã®å®è¡æéãã©ã®ããã«å¢å ãããã衚ããŸããå ¥åãµã€ãºnã«å¯ŸããŠãO(n)ãO(n²)ãO(log n)ãªã©ã§è¡šçŸããŸãã
- O(1): 宿°æéïŒå ¥åãµã€ãºã«é¢ä¿ãªãäžå®ïŒ
- O(log n): å¯Ÿæ°æéïŒäºåæ¢çŽ¢ãªã©ïŒ
- O(n): ç·åœ¢æéïŒç·åœ¢æ¢çŽ¢ãªã©ïŒ
- O(n log n): ç·åœ¢å¯Ÿæ°æéïŒå¹ççãªãœãŒãã¢ã«ãŽãªãºã ãªã©ïŒ
- O(n²): äºæ¬¡æéïŒããã«ãœãŒããªã©ïŒ
- O(2^n): ææ°æéïŒç·åœããæ¢çŽ¢ãªã©ïŒ
2. 空éè€é床ïŒSpace ComplexityïŒ
ã¢ã«ãŽãªãºã ã䜿çšããã¡ã¢ãªéãã©ã®ããã«å¢å ãããã衚ããŸãã
- O(1): 宿°ç©ºéïŒè¿œå ã®ã¡ã¢ãªãã»ãšãã©äœ¿çšããªãïŒ
- O(n): ç·åœ¢ç©ºéïŒå ¥åãµã€ãºã«æ¯äŸããã¡ã¢ãªã䜿çšïŒ
- O(n²): äºæ¬¡ç©ºéïŒäºæ¬¡å é åãªã©ïŒ
å®è·µçãªäŸïŒã¢ã«ãŽãªãºã ã䜿ã£ãåé¡è§£æ±º
ããã§ã¯ãã¢ã«ãŽãªãºã ã䜿ã£ãŠå®éã®åé¡ã解決ããäŸã玹ä»ããŸãã
äŸé¡ïŒæé »å€ïŒã¢ãŒãïŒãæ±ãã
é åã®äžã§æãé »ç¹ã«åºçŸããå€ïŒæé »å€ïŒãæ±ããã¢ã«ãŽãªãºã ãèããŠã¿ãŸãããã
è§£æ³
- åèŠçŽ ã®åºçŸåæ°ãæ°ãã
- æãåºçŸåæ°ãå€ãèŠçŽ ãèŠã€ãã
ç䌌ã³ãŒã
function findMode(array):
if array is empty:
return null
// åèŠçŽ ã®åºçŸåæ°ãæ°ãã
countMap = empty map
for each element in array:
if element exists in countMap:
countMap[element] = countMap[element] + 1
else:
countMap[element] = 1
// æé »å€ãèŠã€ãã
maxCount = 0
mode = null
for each (element, count) in countMap:
if count > maxCount:
maxCount = count
mode = element
return mode
JavaScriptå®è£
function findMode(array) {
if (array.length === 0) return null;
// åèŠçŽ ã®åºçŸåæ°ãæ°ãã
const countMap = {};
for (const element of array) {
countMap[element] = (countMap[element] || 0) + 1;
}
// æé »å€ãèŠã€ãã
let maxCount = 0;
let mode = null;
for (const element in countMap) {
if (countMap[element] > maxCount) {
maxCount = countMap[element];
mode = element;
}
}
return mode;
}
// 䜿çšäŸ
const numbers = [1, 2, 3, 2, 2, 4, 5, 3, 2];
console.log(findMode(numbers)); // 2
ã¢ã«ãŽãªãºã ãåŠã¶ããã®ãªãœãŒã¹
ã¢ã«ãŽãªãºã ãããã«åŠã³ããæ¹ã®ããã«ãããããã®æ¥æ¬èªãªãœãŒã¹ãããã€ã玹ä»ããŸãïŒ
1. æ¥æ¬èªã®ãªã³ã©ã€ã³ãã©ãããã©ãŒã
- Paiza: å®è·µçãªããã°ã©ãã³ã°åé¡ãè±å¯ã§ãã¹ãã«ãã§ãã¯ãå¯èœ
- AtCoder: ç«¶æããã°ã©ãã³ã°ã®ã³ã³ãã¹ãã宿çã«éå¬ããã
- ãããã€ã³ã¹ããŒã«: çãåç»ã§åºæ¬çãªã¢ã«ãŽãªãºã ãåŠã¹ã
- Progate: åå¿è åãã®ã€ã³ã¿ã©ã¯ãã£ããªåŠç¿ãã©ãããã©ãŒã
2. æžç±
- ãã¢ã«ãŽãªãºã å³éã ç³ç°ä¿èŒãå®®åŽä¿®äž è
- ãäžçã§éãããã°ã©ãã³ã°åãéãã150åã Gayle Laakmann McDowell è
- ãåé¡è§£æ±ºåãéããïŒã¢ã«ãŽãªãºã ãšããŒã¿æ§é ã å€§æ§»å Œè³ è
3. æ¥æ¬èªã®YouTube ãã£ã³ãã«
- ããã³ãŒã: ã¢ã«ãŽãªãºã ãããŒã¿æ§é ãæ¥æ¬èªã§ãããããã解説
- ããŸã¶ãŒã®IT倧åŠ: ããã°ã©ãã³ã°ã®åºç€ããã¢ã«ãŽãªãºã ãŸã§å¹ åºã解説
- Tomoaki Takezoe: ã¢ã«ãŽãªãºã ã®è§£èª¬ãç«¶æããã°ã©ãã³ã°ã®ãã¯ããã¯ã玹ä»
- JMOOC æŸé倧åŠ: 倧åŠã¬ãã«ã®ã¢ã«ãŽãªãºã è¬åº§ãå ¬éãããŠãã
ãŸãšã
ãã®èšäºã§ã¯ãã¢ã«ãŽãªãºã ã®åºæ¬æŠå¿µããã代衚çãªã¢ã«ãŽãªãºã ããããŠå¹çæ§ã®è©äŸ¡æ¹æ³ãŸã§å¹ åºã解説ããŸããã
ã¢ã«ãŽãªãºã ã¯ãããã°ã©ãã³ã°ã®åºç€ã§ãããå¹ççãªã³ãŒããæžãããã®éèŠãªç¥èã§ããäžåºŠã«ãã¹ãŠãçè§£ããããšãããå°ããã€å®è·µããªãã身ã«ã€ããŠããããšãããããããŸãã
ç¹ã«åå¿è ã®æ¹ã¯ã以äžã®ã¹ãããã§åŠç¿ãé²ãããšããã§ãããïŒ
- åºæ¬çãªã¢ã«ãŽãªãºã ïŒç·åœ¢æ¢çŽ¢ãããã«ãœãŒããªã©ïŒãçè§£ãã
- ç°¡åãªåé¡ãè§£ããªãããã¢ã«ãŽãªãºã çæèã身ã«ã€ãã
- ããå¹ççãªã¢ã«ãŽãªãºã ïŒäºåæ¢çŽ¢ãã¯ã€ãã¯ãœãŒããªã©ïŒãåŠã¶
- å®éã®ãããžã§ã¯ãã§ã¢ã«ãŽãªãºã ãæŽ»çšãã
ã¢ã«ãŽãªãºã ã®åŠç¿ã¯äžæäžå€ã«ã¯ãããŸããããåºæ¬ãæŒãããŠç¶ç¶çã«åŠã¶ããšã§ãããã°ã©ãã³ã°ã¹ãã«ã¯ç¢ºå®ã«åäžããŸãã
Discussion
zenn 㯠mermaid èšæ³ãµããŒãããŠããã¿ãããªã®ã§ãããŒãã£ãŒãã¯ãã£ã¡ã«ããŠã¿ãæ¹ãããããâŠâŠïŒ
âš ãææããããšãããããŸãïŒZenn ã§ mermaid èšæ³ã䜿ããã®ã¯ç¥ããŸããã§ããã
ãã£ãããªã®ã§ãä»åŸã®èšäºã§ã¯ mermaid ãæŽ»çšããŠã¿ãŸããïŒ
貎éãªãã£ãŒãããã¯ãå©ãããŸãð