Поможет ли знание алгоритмов в решении типичных задач?

Здравствуйте,
Учу язык javascript, на сайте learn.javascript стараюсь решать задачи по основам языка, т.е. на методы, циклы и т.д. Проблема в том, что я могу просидеть несколько часов над простейшей задачей, и не могу придумать решение. Так, например, уже около недели думаю, как найти простые числа в массиве, хотя понимаю, что это основа основ.
Самое обидное то, что теорию языка я учу , и всё понимаю, но когда дело доходит до практики - у меня ступор и ничего не помогает.
Скажите пожалуйста, поможет ли мне знание алгоритмов в решении задач, или же алгоритмы - это уже для тех, кто умеет решать хотя бы типичные базовые задачи программирования ? У меня есть книга Сэджвика, думаю, стоит ли читать его прямо сейчас, или мне ещё слишком рано браться за алгоритмы ?

Что вы думаете ? Что посоветуете ? Как научить мозги щёлкать задачи как семечки ?
( знаю, что самое главное практика, но по моим наблюдениям, толку от того, что я сижу целую ночь над задачей о простых числах - очень мало. даже наоборот, чувствую себя ужасно глупым и пропадает настроение ).
Спасибо
  • Вопрос задан
  • 498 просмотров
Пригласить эксперта
Ответы на вопрос 3
@LiguidCool
Ну потому что подобные задачи уже не совсем программирование, а математика, геометрия (если рисуете), теория вероятности итп.
А вообще хорошей практикой является гуглинг. Основа программирования это переиспользование кода (своего или чужого). Но раз вы учитесь, то не надо тупо копировать, а вникать в логику.

PS
Кстати решение вашей задачи можно на википедии найти.
Ответ написан
Комментировать
Falseclock
@Falseclock
решаю нестандартные задачи
Что такое алгоритм? Это блок схема с правилами и условиями. Часто думают что алгоритм - это что-то страшное и связанное с высшей математикой, длинными формулами и кучей неизвестных. Вовсе нет! Алгоритм - это последовательность действия, которые ведут к какому-то результату.

У вас есть задача, соответственно надо придумать как ее решить.

Самый действенный способ, которым даже я пользуюсь, особенно когда у меня 10-ки условий и операций - это нарисовать блок схему и в ней ориентироваться что я хочу и как это реализовать.
435bd24dad594f279b18ee293b1f353c.gif

Когда такая блок схема есть, то потом дальше легче ориентироваться, я иногда пишу прям в коде

/* пример выборки
		 invoice_number | invoice_amount |           invoice_customer           |    invoice_date     |    date_check    | order_id | order_data_id | quantity | price |              item_uuid
		----------------+----------------+--------------------------------------+---------------------+------------------+----------+---------------+----------+-------+--------------------------------------
		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |         10125 |        8 | 41160 | 76e80df8-5802-11e4-6686-0e459e882122
		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |         10124 |        4 | 41160 | bde6a7ce-32c2-11e2-92a8-c692850d4a80
		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |               |        1 |   111 | e6b5251c-feb3-11e6-ef88-26a4bef88324
		 
		 1.		Пользоваетель добавляет инвойс через сайт, соответствие позициций заказа сохраняется через order_data_id, а то что в инвойсе через item_uuid
		 2.		Если в 1с кто-то удаляет позицию, то мы в базе также обязаны удалить запись и из invoice_data
		 2.1		Алгоритм поиска записи:
		 2.1.1			получаем из этого запроса все текущие позиции с item_uuid
		 2.1.2.			ищем такую запись в массиве $invoice['Товары']. Если не найдено, то строку нужно удалить
		 2.2		Процесс удаления:
		 2.2.1			перед удалением нам надо изменить в таблице order_data стаус на  OrderState::CANCELED -> Отменен
		 2.2.2			затем удалить запись из invoice_data, так как в инвойсе этой строки не существует
		 3.		Если в 1с кто-то добавляет позицию, а в CMR такой позиции нет, то мы должны будем ее добавить в invoice_data
		 3.1.		Добавляем запись без указания order_data_id. Это будет говорить о том, что в счете есть такая позиция, а в CRM она никуда не привязана
		 3.2.		Необходимо в веб сокете передать эту информацию и на сторое JS сделать информирование и обработку этих данных
		 4.		Необходимо сравнить все позиции и высчитать новые значения
		 5.		Пустая выборка означает, что полученный счет никуда не привязан
		*/


Ну а реализация алгоритма - это уже инструментарий языка. И это уже нарабатывается с опытом.
Ответ написан
SpyDeX
@SpyDeX
Рыбу не раздаю, только удочки.
Если вы по несколько часов залипаете на задаче определения чисел как простых, то может программирование и не ваше?
не всем же быть банкирам, и не всем быть министрами, возможно и не всем быть программистами...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы