Фрагмент для ознакомления
2
Много было сказано и написано на тему проектирования и анализа алгоритмов. Существует большое количество замечательных учебников, передовых монографий и высококачественных специализированных журналов в этой области. Они охватывают ряд вопросов, связанных со стратегиями проектирования (такими как жадность, разделение и завоевание, ветвление и связывание, двоичное удвоение и т.д.), реализацией (выбор структур данных для хранения и обработки информации) и анализом (модель вычислений, асимптотика, нижние границы, структуры сложности и т.д.).
Прекрасное резюме общих черт, общих для алгоритмического мышления и математического мышления, сделано Кнутом [5]. Эти две формы мышления характеризуются такими особенностями, как манипулирование формулами, представление реальности, сведение к более простым проблемам, абстрактное мышление. Заметными различиями в функциях являются способ обработки бесчисленного континуума в математике и способ обработки понятия размера доказательства (вычислительной сложности) в информатике.
Алгоритм Евклида (Элементы, Книга 7) для вычисления наибольшего общего делителя (gcd) двух целых чисел является прекрасным примером современного понятия алгоритма. Он отображает все свойства и функции, связанные с установлением правильности и вычислительной сложности. Один измеряет вычислительную сложность алгоритма, выражая количество основных шагов, предпринятых алгоритмом для решения задачи, в терминах размеров входных данных (и размеров всех промежуточных результатов). В общем, максимальное количество шаги, выполняемые по всем возможным входным данным по асимптотически большим входным данным, используются в качестве верхней границы и служат для характеристики поведения алгоритма.
Эта мера, выраженная как функция размера входных данных, известна как наихудшая асимптотическая (временная) сложность алгоритма. Размер элемента обычно равен количеству двоичных битов, необходимых для кодирования элемента. Пусть размеры двух входных целых чисел x, y равны n битам. Евклидов алгоритм gcd для получения gcd(x, y) требует количества шагов (или квивалентно времени), пропорционального O(n3). Таким образом, вычислительная сложность алгоритма евклидова gcd называется кубической по размеру входных данных. Алгоритм, сложность которого полиномиальна по размеру входных данных, считается хорошим.
Задача, допускающая алгоритм полиномиального времени, считается выполнимой или простой. С другой стороны, существует большое количество
проблем, которые не кажутся легкими (т.е. они не кажутся разрешимыми с помощью алгоритма полиномиального времени). Рассмотрим график математической структуры:
G = (V, E) - граф,
где V - множество из n вершин, а E представляет собой набор ребер (подмножество множества n(n – 1)/2 пар вершин). Размер входных данных в случае графа пропорционален количеству вершин и ребер и ограничен O(n2). Например, проблема определения того, имеет ли граф G гамильтонов цикл (циклический обход ребер графа, посещающих каждую вершину ровно один раз), не кажется простой в приведенном выше техническом смысле. Ясно, перечисляя все возможные n! перестановки вершин и проверка возможности обхода графа по ребрам в соответствии с вершиной перестановка, можно решить проблему. Очевидно, что этот алгоритм использует подход грубой силы, заключающийся в исчерпывающем перечислении всех возможных решений. Вычислительная сложность экспоненциальна по числу вершин, так как функция n! растет примерно как O(nn + 1/2exp–n).
Фрагмент для ознакомления
3
сСПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
[1] Knuth, D. E., The Art of Computer Programming Vol. 1 Fundamental Algorithms, Addison Wesley, New York, 1973.
[2] Dijkstra, E. W., A Short Introduction to the Art of Programming, Computer Society of India Press, Mumbai, 1977.
[3] Appel, K. and Haken, W., Every planar map is four colourable. Illinois J. Math., 1977, 21, 429–567.
[4] Manna, Z., Logics of Programs, Addison Wesley, 1987.
[5] Knuth, D. E., Algorithmic thinking and mathematical thinking. Am. Math. Monthly, 1986, 81, 322–343.
[6] Edmonds, J., Paths, trees and flowers. Can. J. Math., 1965, 17, 449–467.
[7] Garey, M. R. and Johnson, D. S., Computers and Intractability – A Guide to the Theory of NP-completeness, W. H. Freeman, San Francisco, 1979.
[8] Lemmermeyer, F., Reciprocity Laws: From Euler to Eisenstein, Springer, New York, 2000.
[9] Edwards, H. M., Fermat’s Last Theorem, Springer, New York, 1977.
[10] Knuth, D. E., The Art of Computer Programming Vol. 2 Seminumerical algorithms, Addison Wesley, New York, 1981.
[11] Yan, S. Y., Number Theory for Computing, Springer, New York, 2000.
[12] Knuth, D. E., The Art of Computer Programming Vol. 3 Sorting and Searching, Addison Wesley, New York, 1981.
[13] Aho, V., Hopcroft, R. E. and Ullman, J. D., Design and Analysis of Algorithms, Addison Wesley, New York, 1982.
[14] Aigner, M. and Ziegler, G. M., Proofs from The Book, Springer, New York, 1998.
[15] Abhijit Das and Veni Madhavan, C. E., Public Key Cryptography: Theory and Practice, Manuscript of a forthcoming book, 2005.
[16] van Lint, J. H. and Wilson, R. M., A Course in Combinatorics, Cambridge University Press, London, 1992.
[17] Gessel, I. and Gian-Carlo Rota (eds), Classic Papers in Combinatorics, Birkhauser, 1987.
[18] Jukna, S., Extremal Combinatorics with Applications to Computer Science, Springer, New York, 2001.
[19] Konig, D., Math. Ann., 1916, 77, 453–465.
[20] Hall, P., On representatives of subsets. J. London Math. Soc., 1935, 10, 26–30.
[21] Dilworth, R. P., A decomposition theorem for partially ordered sets. Ann. Math., 1950, 51, 161–166.
[22] Hardy, G. H. and Ramanujan, S., Asymptotic formulae in combinatory analysis. Proc. London Math. Soc., 1918, 17, 75–115.
[23] Koblitz, N., A Course in Number Theory and Cryptography, Springer, New York, 1996.
[24] MacWilliam, F. J. and Sloane, N. J. A., The Theory of Error Correcting Codes, North Holland, New York, 1977.