Большую часть времени можно использовать пул, поскольку Вы избегаете дорогого процесса создания потока.
Однако в некоторых сценариях можно хотеть создать поток. Например, если Вы не единственный с помощью пула потоков и потока, Вы создаете, долговечно (чтобы не использовать совместно используемые ресурсы) или например если Вы хотите управлять stacksize потока.
Я бы порекомендовал книгу Skiena. Вы начали изучать алгоритмы, вам также следует начать изучать алгоритмы.
Для тех, кто редактировал этот ответ и заменил последнее вхождение слова алгоритмы словом математика : Я имел в виду алгоритмов , когда писал этот ответ, я все еще имею в виду алгоритмов , замена слова на математика существенно меняет ответ. Если вы думаете, что OP должен изучить математику, опубликуйте свой ответ на этот счет. Если бы вы затруднились прочитать комментарий ниже, вы бы поняли, почему я выбрал слово алгоритмы , а не математика .
Если вам нужен практичный подход с небольшой математикой, попробуйте В двух словах об алгоритмах - Я на самом деле получил удовольствие от чтения, что больше, чем я могу сказать о шедевре кнута. (Хорошо, есть несколько страниц в Knuth, которые достаточно поучительны, чтобы их можно было назвать забавными .)
Я просто рассчитал время для некоторых функций из любопытства. В этих тестах я удаляю не буквенно-цифровые символы из строки string.printable
(часть встроенного модуля string
). Использование скомпилированных '[\ W _] +'
и pattern.sub ('',
«Введение в алгоритмы» Кормен, Лейзерсон и Ривест. См. http://www.amazon.com/Introduction-Algorithms-Second-Thomas-Cormen/dp/0262032937
Вот пара рекомендаций:
Я бы порекомендовал не использовать «Руководство по разработке алгоритмов» для ваших целей и вместо этого просматривать Кормен или Википедию.
После краткого введения в основные алгоритмические темы, страницы 171-437 don на самом деле не учат вас ни тому, как работают алгоритмы, ни тому, как их проектировать, но больше о том, какие алгоритмы существуют и где найти их реализации (иногда это отсылает вас к реализациям, которые вам нужно будет купить, как в разделе о линейном программировании)
Например, есть 3 страницы по умножению матриц, которые дают несколько примеров того, для чего это полезно, представляют наивный алгоритм O (N 3 ) и упоминают, что есть лучшие алгоритмы, такие как O ( N 2.81 ) (без описания алгоритма) и рекомендуем вам использовать для этого библиотеку LAPACK.
Поэтому, если вы хотите узнать, как работают алгоритмы, а не какие алгоритмы существуют и где найти их реализации, я снова не рекомендую "Руководство по разработке алгоритмов".
Я недавно купил Руководство по разработке алгоритмов и прочитал только несколько первых глав. Это отличная книга, но, на мой взгляд (из того, что я читал до сих пор):
(1) она не менее плотная, чем книга Кормена.
(2) это больше касается практических реализаций алгоритмов, чем алгоритмов обучения.
If you can afford it (or your employer pays for it), and you program in Java, I'd suggest: Data Structures and Algorithms in Java. It covers the same topics you find in other books, but it makes it easy to apply an understand if your used to programming in Java. For example, C++ data structure books don't usually spend a great deal of time on hashes, as structures based on hashes aren't as common in C++ programming. In Java, however, hashes are very common, and every object has a hashCode method. The book combines a good mix of theory and practice.
alt text http://ecx.images-amazon.com/images/I/51w6USIIpxL._SL160_.jpg
Нет, не думаю. Попробуйте Структуры данных и алгоритмы за 24 часа Роберта Лафора.