Монстр – это создание Виктора Франкенштейна, собранное из старых частей тела и странные химические вещества, анимированные таинственной искрой. — Sparknotes.
На этой неделе я не потерпел неудачу первого кодирования. Но я ушел от этого опыта с лучшим пониманием о том, как я подхожу алгоритмы.
Если вы хотите решить алгоритмы оптимальным способом, это не в статье для вас. Однако, если вы застряли только начну, когда вы столкнулись с новой проблемой, эта статья может быть полезной. Существует много разных способов решать и подумать об этих проблемах, а эти шаги – это то, что я нашел полезным, когда я начну новый Algo:
понять детали, которые вам нужны
использовать прошлые переживания
попробуйте, потерпеть неудачу, попробуйте снова
Я никогда не чувствовал себя особенно сильным в алгоритмах или натянутом к этим видам проблем. Когда я впервые начал решать их, мой разум изо всех сил пытался сломать эту проблему на шаги. Я пытался следовать совету, которую я слышал от сверстников и профессионалов: понять проблему, сломайте его на шаги, понять ограничения, вход, выход. С во многих мыслях гудит в моей голове, неудивительно, что я так много боролся, чтобы найти мою опору.
Проблема:
Учитывая прямоугольную матрицу символов, добавьте границу звездочков (*) к ней. Кодовый сигнал
Мое решение:
function addBorder(picture) {
let longestLen = findLongestString(picture) + 2
let stars = '*'.repeat(longestLen)
let newString = ""
let rect = []
rect.push(stars)
for(let i = 0; i < picture.length; i++){
newString = '*' + picture[i] + '*'
rect.push(newString)
}
rect.push(stars)
return rect
}
function findLongestString(inputArray) {
let len = 0;
for (let i = 0; i < inputArray.length; i++){
if(inputArray[i].length > len){
len = inputArray[i].length
}
}
return len
}
Это моя большая победа на сегодня. Это проблема, которую я решил в сравнительно коротком количестве по сравнению с другими. Это также проблема, которая могла бы помочь мне в моем кодовом вызове, если бы я столкнулся с ним раньше.
Я знаю, что это не оптимальное решение, но мне легко понять и пройти. Я могу понять каждую его часть, где находится ее реальная ценность.
Понимать: части, которые вам нужны
Вы должны понять проблему, прежде чем вы сможете решить, по крайней мере, вот что я слышал.
Но что это действительно значит понять проблему? Это было то, с кем мне было трудно. Даже когда я был уверен, что знал, что это спросило, а какие выходы, входы и ограничения я боролись с тем, где начать. Теперь я знаю, вместо того, чтобы думать об этих компонентах индивидуально, я должен был сгруппировать их вместе в части, которые мне нужны.
В моем случае, чтобы понять проблему, мне нужно понимать части необходимости решать ее. Возможно, мне нужно вернуть новый массив. Это означает, что мой выход должен быть массивом, это означает, что мне нужно где-то инициализировать массив. Возможно, мне нужно отслеживать переменную. Это означает, что мне нужно где-то инициализировать переменную.
Иногда легко посмотреть, какие части мне нужно. Иногда, работая через проблему, я пойму, что буду или не понадобиться, которую я подумал, что мне нужно.
Возьмите, например, переменные инициализации в начале экспоната 1. Это может не выглядеть очень красиво, но это строительные блоки проблемы. Я знал, что мне нужна строка звездочек в начале и конец матрицы.
let longestLen = findLongestString(picture) + 2 let stars = '*'.repeat(longestLen) let newString = "" let rect = []
Когда я проводил проблему, я заново открыл, что строки неизменяются, поэтому мне нужно было сохранить эти случаи в переменной, называемой NewString, поскольку я прошел через петлю.
Наконец, я знал, что мне нужно было вернуть новую матрицу, поэтому я инициализировал новую и назвал его прямоугольником (коротко для прямоугольника).
Использовать прошлые переживания
Поскольку я привернулся практикую алгоритмы почти ежедневно, я вижу все более и более простые проблемы в нынешних проблемах. Функция помощника FindlongestString является частью другой проблемы, которую я решал ранее.
function findLongestString(inputArray) {
let len = 0;
for (let i = 0; i < inputArray.length; i++){
if(inputArray[i].length > len){
len = inputArray[i].length
}
}
return len
}
Для этой проблемы я знал, что мне нужна длина самых длинных струн в массиве изображений, чтобы определить, как долго границы будут. Это было хорошо, что я уже написал это в функции AlllongestStrings:
def allLongestStrings(inputArray)
len = 0
longest = []
inputArray.each do |el|
if el.length > len
len = el.length
end
end
inputArray.each do |st|
if st.length == len
longest.push(st)
end
end
longest
end
Каждая новая проблема не обязательно означает, что нам нужен совершенно новый способ решить ее. Программирование должно быть перерабатываемым, и вы сможете использовать старые проблемы, если вам нужно.
Попробуй, потерпеть неудачу, пытаться
Еще одна общая поговорка в программировании – провалиться быстро Отказ
Когда я впервые начал пытаться решать алгоритмы, я стремился к оптимальному способу. Я хотел, чтобы мои решения были быстрее, очистительными, без вложенных для петлей. Хотя это важно, это вид мышления, который держал меня от простых способов.
И иногда простой способ – лучший способ.
Иногда ваш первый инстинкт – тот, который вы должны слушать.
Я боролся с алгоритмами так долго, потому что я пытался быть идеальным и сделать их идеальными. Теперь я знаю, чтобы слушать творческую искру в моей голове. Иногда это работает, и это круто. Иногда это не удается и я учусь. Но, по крайней мере, я учусь.
Вывод
Это не совсем, конец – все, когда дело доходит до алгоритмов. Я все еще буду бороться. Я все равно поншу и стараюсь быть идеальным время от времени.
Но я научился понимать этих монстров, называемых алгоритмами и немного больше. И это заставило меня меньше их бояться.
Оригинал: “https://dev.to/kahawaiikailana/algorithms-are-monsters-but-don-t-be-afraid-1amj”