Где я могу изучать алгоритмы программирования (java и т.д.), Потому что когда я ищу такие программы, как перестановки, нарушения, сортировки и т.д., Я всегда нахожу математические алгоритмы.
Пример: подсчеты
Отсюда вытекает следующее соотношение:
!n = (n - 1) (!(n-1) + !(n-2)).\,
where !n, known as the subfactorial, represents the number of derangements, with the starting values !0 = 1 and !1 = 0.
Notice that this same recurrence formula also works for factorials with different starting values. That is 0! = 1, 1! = 1 and
n! = (n - 1) ((n-1)! + (n-2)!)\,
which is helpful in proving the limit relationship with e below.
Also, the following formulae are known:[4]
!n = n! \sum_{i=0}^n \frac{(-1)^i}{i!},
!n = \left\lfloor\frac{n!}{e}+\frac{1}{2}\right\rfloor , \quad n\geq 1,
!n = \left[ \frac{n!}{e} \right] , \quad n\geq 1
Еще один пример, который я нахожу, - это когда я просматриваю сортировку в java. Я вижу O (n log n) или O (log n) терминологию, которые я вообще не понимаю. Я не очень хорошо разбираюсь в математике, но в то же время я очень заинтересован в программировании. Помогите мне найти книгу или сайт, чтобы понять алгоритмы сортировки, необходимые для языков программирования
Я взял алгоритмы I и алгоритмы II на Coursera, они великолепны. Существует также учебник для этого курса.
Алгоритмы касаются математики. Они языковые-агностики. Вы можете реализовать алгоритмы на любом языке, если вы знаете его грамматику, то есть ее базовые типы данных, операторы, принятие решений и т.д. Многие языки предоставляют библиотеки, реализующие известные и/или полезные алгоритмы или функциональные возможности (например, для сортировки, шифрования и т.д. )
Поэтому поиск "java-алгоритмов" - это плохая строка поиска. Вы должны искать "основы программирования Java",
Если вы хотите понять, что стоит за красотой алгоритмов, я настоятельно рекомендую прочитать эту замечательную книгу: "Programming Pearls" (2-е издание). Первое издание было написано в 1983 году, и интересно понять, почему автор решил написать второе издание 17 лет спустя.
Вы также можете посмотреть онлайн-лекции, например, MIT.
Что касается O (log (n)) части вашего вопроса, это обозначение, чтобы выразить вычислительную сложность алгоритма (важно, когда вы хотите понять производительность, которую вы можете ожидать от алгоритма, или если вы хотите сообщить о производительности ваших собственных алгоритмов).
Для Java вы можете начать с учебников Oracle.
O (n log n) или O (log n) - обозначение Big O. Я связан с разделами, где объясняются наиболее распространенные случаи (например, примеры, о которых вы просили). Существует также qaru.site/questions/89/...
См. Учебники по алгоритму Topcoder для получения хороших статей.
Важность алгоритмов - хороший учебник (объясняет основные алгоритмы и дает примеры для нотации Big O).
Основы комбинаторики охватывают вашу проблему -derangements.
Для books- см. Введение в алгоритмы и алгоритмы, 4-е издание.