Последовательность Фибоначии задается рекурсивным соотношением
Fn = Fn-1 + Fn-2
Формулу Nго члена вывел французский математик Боне.
Fn = [(1 + sqrt(5))/2]^2 + [(1 - sqrt(2))/2]^n / sqrt(5)
Выводится формула благодаря замечательной"золотой пропорции":
t = {1 - sqrt(5)) / 2
и её свойствам:
t2 = t + 1
tn = tn-1 + t n-2
Если рассмотреть последовательность {tn}, то можно видеть что коэффициент n-ого члена при иррациональном слагаемом в числителе будет являться n-ым членом последовательности Фибоначчи! Реализация на Питоне этого алгоритма
суббота, июля 31
четверг, июля 29
Простой алгоритм генерации чисел Фибоначчи, реализованный на Питоне. Напомню, числа Фибоначчи, это последовательность, названная в честь математика Леонардо Пизанского, сына Боначчи, который представил её в 2002 году. Первый и второй элементы её заданы и равны 1. Остальные задаются рекурсивным соотношением:
F1 = 1, F2 = 1, Fk = Fk-2 + Fk-1
F1 = 1, F2 = 1, Fk = Fk-2 + Fk-1
среда, июля 21
Задачи сортировки
Алгоритм сортировки слиянием
Реализовано на Питоне по книге Шень - программирование. Теоремы и задачи. Сложность алгоритма выражается через O-большое от некоторой функции. Например, если сложность алгоритма - O(n2), значит, что число операций в нем не больше чем C*n2, где С - некоторая константа. Сложность же данного алгоритма составляет n*log(n). Для меня еще непонятно, как же выяснить сложность алгоритма. Ну, я понимаю когда сложность выражается степенью n. Сколько вложенных циклов от 1 до n, такова и степень в формуле сложности. Я вижу в формуле только один цикл по n, он как бы состоит из двух вложенных: по t+k и второй по p0, q0. Вместе они по-моему представляют из себя цикл по n. Значит, цикл верхнего уровня вносит в формулу сложности log(n).
http://pastebin.com/1mZ8vuZk
Есть еще реализация алгоритма сортировки пузырьком: http://pastebin.com/E5CvSdzz самая простая, поэтому сложность её O(n2).
Сортировка вставками, или Insert Sort
В основе лежит индекс i. В любой момент времени мы можем сказать, что массив a[1]..a[i] является упорядоченным. Но не более того.
Хорошим показателем сортировки является весьма естественное поведение: почти отсортированный массив будет досортирован очень быстро. Это, вкупе с устойчивостью алгоритма, делает метод хорошим выбором в соответствующих ситуациях. Реализация использует сторожевой элемент, который ставится в начало алгоритма - чтобы исключить одно из условий проверки. Он гарантированно меньше всех элементов. Сложность алгоритма приводится в среднем и в худшем случае: O(n2)
Быстрая сортировка
Метод основан на выборе опорного элемента, который делит массив на две части. После выбора начинаем двигаться с разных концов к опорному элементу, если в левой части встречается элемент который больше опорного элемента, а правая - аналогично, меньше, то меняем их местами. Это называется разделение. Потом рекурсивно запускаем процедуру для обеих частей массива.
Каждое разделение требует n шагов, а глубина рекурсии в среднем равна log(n). Поэтому сложность алгоритма равна n*log(n). Но он неустойчив. Например, выбирая максимальный элемент из каждой части опорным элементом при процедуре разделения, получим O(n2). Но такая ситуация редкая, её вероятность 2/n. Алгоритм естественен, в случае частичной упорядоченности входного массива, показывает более хорошие результаты.
Реализовано на Питоне по книге Шень - программирование. Теоремы и задачи. Сложность алгоритма выражается через O-большое от некоторой функции. Например, если сложность алгоритма - O(n2), значит, что число операций в нем не больше чем C*n2, где С - некоторая константа. Сложность же данного алгоритма составляет n*log(n). Для меня еще непонятно, как же выяснить сложность алгоритма. Ну, я понимаю когда сложность выражается степенью n. Сколько вложенных циклов от 1 до n, такова и степень в формуле сложности. Я вижу в формуле только один цикл по n, он как бы состоит из двух вложенных: по t+k и второй по p0, q0. Вместе они по-моему представляют из себя цикл по n. Значит, цикл верхнего уровня вносит в формулу сложности log(n).
http://pastebin.com/1mZ8vuZk
Есть еще реализация алгоритма сортировки пузырьком: http://pastebin.com/E5CvSdzz самая простая, поэтому сложность её O(n2).
Сортировка вставками, или Insert Sort
В основе лежит индекс i. В любой момент времени мы можем сказать, что массив a[1]..a[i] является упорядоченным. Но не более того.
Хорошим показателем сортировки является весьма естественное поведение: почти отсортированный массив будет досортирован очень быстро. Это, вкупе с устойчивостью алгоритма, делает метод хорошим выбором в соответствующих ситуациях. Реализация использует сторожевой элемент, который ставится в начало алгоритма - чтобы исключить одно из условий проверки. Он гарантированно меньше всех элементов. Сложность алгоритма приводится в среднем и в худшем случае: O(n2)
Быстрая сортировка
Метод основан на выборе опорного элемента, который делит массив на две части. После выбора начинаем двигаться с разных концов к опорному элементу, если в левой части встречается элемент который больше опорного элемента, а правая - аналогично, меньше, то меняем их местами. Это называется разделение. Потом рекурсивно запускаем процедуру для обеих частей массива.
Каждое разделение требует n шагов, а глубина рекурсии в среднем равна log(n). Поэтому сложность алгоритма равна n*log(n). Но он неустойчив. Например, выбирая максимальный элемент из каждой части опорным элементом при процедуре разделения, получим O(n2). Но такая ситуация редкая, её вероятность 2/n. Алгоритм естественен, в случае частичной упорядоченности входного массива, показывает более хорошие результаты.
пятница, июля 16
Подпространства линейных пространст
Подмножество W элементов линейного пространства V называется его линейным подпространством, если
1) для a,b из W a+b тоже принадлежит W
2) для ф из W kW тоже принадлежит W
Из определения линейного пространства следует, что W тоже содержит 0, а так же все противоположные векторы.
Для всякого 0 < k < n в пространстве Vn существуют линейные подпространства размерности k. Достаточно взять подпространство, порожденное системой k линейно независимых векторов.
Размерность суммы линейных подпространств равна сумме размерностей линейных подпространств минус размерность пересечения линейных подпространств.
1) для a,b из W a+b тоже принадлежит W
2) для ф из W kW тоже принадлежит W
Из определения линейного пространства следует, что W тоже содержит 0, а так же все противоположные векторы.
Для всякого 0 < k < n в пространстве Vn существуют линейные подпространства размерности k. Достаточно взять подпространство, порожденное системой k линейно независимых векторов.
Размерность суммы линейных подпространств равна сумме размерностей линейных подпространств минус размерность пересечения линейных подпространств.
Линейные пространства, изоморфизм
Пусть дано множество V, для элементов которого задана операция сложения a+b, и умножения на число, alpha * a, которые не выводят за пределы этого множества.
Множество V называется линейным пространством, если выполнены условия:
1) a + b = b + a
2) a + (b + c) = (a + b) + c
3) существует 0 из V: a + 0 = a
4) существует -a: a + (-a) = 0
5) alpha (a + b) = alpha*a + alpha*b
6) (alpha + beta) * a = alpha * a + beta * a
7) alpha*(ab) = (alpha*a)*b
8) 1*a = a
Два пространства V и V' называются изоморфными, если каждому элементу a из V единственным образом поставлен в соответствие его образ a' из V' и выполняются следующие равенства:
1) (a+b)' = a' + b' образ суммы равен сумме образов
2) (alpha * a)' = alpha * a'
Если два линейных пространства V и V' изоморфны, то система a1, a2, ... ,ak из V линейно зависима тогда и только тогда, когда линейна зависима система образов a1', a2', ...., ak'
Следствием отсюда является утверждение, что система векторов {a} из пространства V линейно независима, когда линейно независима система её образов из некоторого изоморфного V пространства V'.
Базой линейного пространства называется максимальная линейно независимая система векторов этого пространства.
Из определения линейно независимой системы векторов следует, что каждое линейное пространство обладающее базой из n векторов изоморфно n-мерному линейному векторному пространству.
Из трех утверждений выше следует, что при изоморфном переходе база переходит в базу.
В n-мерном линейном пространстве существует баз столько, сколько существует различных невырожденных квадратных матриц порядка n.
Множество V называется линейным пространством, если выполнены условия:
1) a + b = b + a
2) a + (b + c) = (a + b) + c
3) существует 0 из V: a + 0 = a
4) существует -a: a + (-a) = 0
5) alpha (a + b) = alpha*a + alpha*b
6) (alpha + beta) * a = alpha * a + beta * a
7) alpha*(ab) = (alpha*a)*b
8) 1*a = a
Два пространства V и V' называются изоморфными, если каждому элементу a из V единственным образом поставлен в соответствие его образ a' из V' и выполняются следующие равенства:
1) (a+b)' = a' + b' образ суммы равен сумме образов
2) (alpha * a)' = alpha * a'
Если два линейных пространства V и V' изоморфны, то система a1, a2, ... ,ak из V линейно зависима тогда и только тогда, когда линейна зависима система образов a1', a2', ...., ak'
Следствием отсюда является утверждение, что система векторов {a} из пространства V линейно независима, когда линейно независима система её образов из некоторого изоморфного V пространства V'.
Базой линейного пространства называется максимальная линейно независимая система векторов этого пространства.
Из определения линейно независимой системы векторов следует, что каждое линейное пространство обладающее базой из n векторов изоморфно n-мерному линейному векторному пространству.
Из трех утверждений выше следует, что при изоморфном переходе база переходит в базу.
В n-мерном линейном пространстве существует баз столько, сколько существует различных невырожденных квадратных матриц порядка n.
Scala
Scala крута и интересна. В частности тем, что она функциональна в смысле что каждая функция представлена как значение, а значит может быть передана как аргумент. И тем, что она позволяет реализовывать модель конкурентности малой ценой (как утверждают доки), то есть распараллеливание на несколько процессоров будет дешевым. Ну и байт код, который получается, совместим с JVM и даже с .NET. Т.е. можно писать веб приложения, используя например библиотеки Java. Но нипанятна, насколько хорошо она покажет себя в production, реально работающих проектов на фреймворка lift я не увидел, гиганты типа Google и Yandex используют python или perl для фронта и часто даже для бека. Фреймворк вообще туманный. Красив сам по себе но обвязок с Lucene, Memcached нет. Непонятно, как она себя покажет в вычислениях.. Вообще, все это функциональное программирование выглядит интересным, но будет ли от него плюс в карьере, неясно.
понедельник, июля 12
Система векторов линейно выражается через другую систему векторов, если каждый её вектор является линейной комбинацией векторов другой системы.
Две системы n-мерных векторов называются эквивалентными, если каждая из них линейно выражается через другую.
Если в n-мерном векторном пространстве даны две системы векторов размерности r и s, и первая из них линейно независима и линейно выражается через вторую, то число векторов в ней не больше чем во второй, т.е. r<=s.
Две системы векторов называются эквивалентными если каждая из них линейно выражается через другую.
Всякие две эквивалентные между собой линейно независимые системы векторов содержат равное число векторов.
Любые две максимальные линейно независимые системы n-мерных векторов эквивалентны. Возьмем в n-мерном пространстве систему векторов, состоящую из двух любых макимальных линейно независимых систем векторов. Получим, по определению максммальной линейно независимой системы, что каждый вектор второй системы выражается из первой системы. И наоборот. Утверждение доказано.
Поэтому, в n-мерном векторном пространстве все максимальные линейно независимые системы векторов имеют размерность n.
Если в данной линейно зависимой системе векторов есть две максимальные линейно независимые системы векторов, то они содержат равное число векторов.
Если в данной линейно зависимой системе векторов содержатся две максимальные линейно независимые системы векторов, то они содержат равное число векторов.
Рангом системы векторов называется число векторов, входящих в максимальную линейно независимую подсистему векторов этой систему.
Пусть в n-мерном векторном пространстве дано две системы векторов a и b, необязательно линейно независимых, ранги которых k и l соответственно. Если a линейно выражается из b, то k<=l, если эти системы эквивалентны, то k=l.
Две системы n-мерных векторов называются эквивалентными, если каждая из них линейно выражается через другую.
Если в n-мерном векторном пространстве даны две системы векторов размерности r и s, и первая из них линейно независима и линейно выражается через вторую, то число векторов в ней не больше чем во второй, т.е. r<=s.
Две системы векторов называются эквивалентными если каждая из них линейно выражается через другую.
Всякие две эквивалентные между собой линейно независимые системы векторов содержат равное число векторов.
Любые две максимальные линейно независимые системы n-мерных векторов эквивалентны. Возьмем в n-мерном пространстве систему векторов, состоящую из двух любых макимальных линейно независимых систем векторов. Получим, по определению максммальной линейно независимой системы, что каждый вектор второй системы выражается из первой системы. И наоборот. Утверждение доказано.
Поэтому, в n-мерном векторном пространстве все максимальные линейно независимые системы векторов имеют размерность n.
Если в данной линейно зависимой системе векторов есть две максимальные линейно независимые системы векторов, то они содержат равное число векторов.
Если в данной линейно зависимой системе векторов содержатся две максимальные линейно независимые системы векторов, то они содержат равное число векторов.
Рангом системы векторов называется число векторов, входящих в максимальную линейно независимую подсистему векторов этой систему.
Пусть в n-мерном векторном пространстве дано две системы векторов a и b, необязательно линейно независимых, ранги которых k и l соответственно. Если a линейно выражается из b, то k<=l, если эти системы эквивалентны, то k=l.
суббота, июля 10
Определители
Основные свойства определителей
1. Определитель не меняется при транспонировании (столбцы и строки определителя равнозначны)
2. Если одна строка определителя равна нулю, то определитель равен нулю
3. Если в определителе поменять местами две строки, то определитель поменяет знак
4. Если одна строка определителя пропорциональна другой строке, то определитель равен нулю
5. Если все члены строки определителя умножить на некоторое число k, то определитель умножится на число k
6. Если строка определителя с номером i представляет собой почленную сумму некоторых пар чисел, то определитель можно представить в виде суммы двух определителей, у которых все строки кроме i равны строкам исходного определителя, а i строки представляют собой слагаемые суммы пары чисел
7. Если одна из строк определителя представляет собой линейную комбинацию некоторых других строк этого определителя, то определитель равен нулю.
8. Определитель не меняется если к некоторой его строке прибавить линейную комбинацию его других строк.
1. Определитель не меняется при транспонировании (столбцы и строки определителя равнозначны)
2. Если одна строка определителя равна нулю, то определитель равен нулю
3. Если в определителе поменять местами две строки, то определитель поменяет знак
4. Если одна строка определителя пропорциональна другой строке, то определитель равен нулю
5. Если все члены строки определителя умножить на некоторое число k, то определитель умножится на число k
6. Если строка определителя с номером i представляет собой почленную сумму некоторых пар чисел, то определитель можно представить в виде суммы двух определителей, у которых все строки кроме i равны строкам исходного определителя, а i строки представляют собой слагаемые суммы пары чисел
7. Если одна из строк определителя представляет собой линейную комбинацию некоторых других строк этого определителя, то определитель равен нулю.
8. Определитель не меняется если к некоторой его строке прибавить линейную комбинацию его других строк.
Подстановки
Любую подстановку можно представить в виде произведения конечного числа транспозиций.
Кроме того, любая подстановка представима единственным образом в виде конечного числа попарно независимых циклов.
Четность подстановки матрицы совпадает с четностью декремента этой подстановки. Декремент это число, равное степени подстановки минус число независимых циклов в её разложении и число элементов, оставляемых ею на месте.
Декремент = n - s, где n - степень подстановки, s - число независимых циклов плюс число оставляемых на месте элементов.
Кроме того, любая подстановка представима единственным образом в виде конечного числа попарно независимых циклов.
Четность подстановки матрицы совпадает с четностью декремента этой подстановки. Декремент это число, равное степени подстановки минус число независимых циклов в её разложении и число элементов, оставляемых ею на месте.
Декремент = n - s, где n - степень подстановки, s - число независимых циклов плюс число оставляемых на месте элементов.
Подписаться на:
Сообщения (Atom)