今天介绍一个有趣的第三方模块——algorithms,它提供用Python实现的一些算法和数据结构及其操作,不是简单的基本操作哦。比如各种排序算法。主要目的是用来
学习
哈,不是生产和工作。
模块安装方法:
pip install algorithms
或 pip3 install algorithms #python3.x
该模块包括如下
子模块
,可以看到涵盖了如下各种数据结构和相关算法:
arrays
backtrack
bit
graph
heap
linkedlist
maths
queues
search
sort
stack
strings
注意在使用某子模块中的方法时,需要
直接的
引入该子模块,不能仅导入algorithms模块或
from algorithms import *
,比如使用maths模块时,需要如下操作:
from algorithms import maths
这里以sort子模块具体举例:
sort
sort子模块的各种方法,大家看到名字也差不多知道是什么算法了吧,但是因为方法是返回输出后的结果,所以不能直接看出不同排序算法的区别,可以上官网查阅源码或者通过计时等方法测试比较一下哦。
bogo_sort #猴子排序(恶搞的^_^)
bubble_sort #冒泡排序
bucket_sort #桶排序
cocktail_shaker_sort #鸡尾酒排序、双向冒泡排序
comb_sort #梳排序
counting_sort #计数排序
gnome_sort #地精排序,也叫stupid sort
heap_sort #堆排序
insertion_sort #插入排序
merge_sort #归并排序
quick_sort #快速排序
radix_sort #基数排序
selection_sort #选择排序
shell_sort #希尔排序
top_sort #拓扑排序
wiggle_sort #摆动排序
举例:
from algorithms import sort
algorithms.sort.bubble_sort([1,5,3,7,3,2])
algorithms.sort.shell_sort([1,5,3,7,3,2])
#都会返回升序的相同结果[1, 2, 3, 3, 5, 7]
通过help可以查看复杂度:
help(algorithms.sort.bogo_sort)
'''
bogo_sort(arr)
Bogo Sort
Best Case Complexity: O(n)
Worst Case Complexity: O(∞)
Average Case Complexity: O(n(n-1)!)
''''
其他模块
鉴于各自模块包括方法较多,这里不一一展开介绍,感兴趣的话就动手试试吧~
具体的各模块包括方法如下表:
子模块名
包含方法
解释
arrays
delete_nth flatten garage josephus longest_non_repeat max_ones_index merge_intervals missing_ranges move_zeros plus_one rotate summarize_ranges three_sum two_sum
关于数组的操作,比如删除第n个数、最长不重复子数组、两数和等
backtrack
add_operators anagram array_sum_combinations combination_sum factor_combinations find_words generate_abbreviations generate_parenthesis letter_combination palindrome_partitioning pattern_match permute permute_unique subsets subsets_unique
回溯相关算法,比如查找回文子串等
bit
add_bitwise_operator bit_operation bytes_int_conversion count_flips_to_convert count_ones find_difference find_missing_number flip_bit_longest_sequence has_alternative_bit insert_bit power_of_two remove_bit reverse_bits single_number single_number2 single_number3 subsets swap_pair
位操作算法
graph
Transitive_Closure_DFS checkDiGraphStronglyConnected clone_graph cycle_detection dijkstra find_all_cliques find_path graph markov_chain minimum_spanning_tree pathBetweenTwoVerticesInDiGraph satisfiability tarjan traversal
图算法
linkedlist
add_two_numbers copy_random_pointer delete_node first_cyclic_node intersection is_cyclic is_palindrome is_sorted kth_to_last linkedlist merge_two_list partition remove_duplicates remove_range reverse rotate_list swap_in_pairs
有序列表的操作、包括是否有序、是否回文、合并、删除重复值等
maths
base_conversion combination extended_gcd factorial gcd generate_strobogrammtic is_strobogrammatic next_bigger next_perfect_square nth_digit prime_check primes_sieve_of_eratosthenes pythagoras rabin_miller rsa sqrt_precision_factor summing_digits
数学计算,包括最大公约数、下一个最大数等
queues
max_sliding_window moving_average priority_queue queue reconstruct_queue zigzagiterator
队列操作,包括移动窗口、优先队列等
search
binary_search find_min_rotate first_occurance jump_search last_occurance linear_search search_insert search_range search_rotate two_sum
包括查找的相关操作,比图:二分查找、首先出现、搜索范围、两数和等
sort
bogo_sort bubble_sort bucket_sort cocktail_shaker_sort comb_sort counting_sort gnome_sort heap_sort insertion_sort meeting_rooms merge_sort quick_sort radix_sort selection_sort shell_sort sort_colors top_sort wiggle_sort
见上文
stack
is_consecutive is_sorted longest_abs_path ordered_stack remove_min simplify_path stack stutter switch_pairs valid_parenthesis
栈的相关操作,包括单调栈等
strings
add_binary breaking_bad decode_string delete_reoccurring domain_extractor encode_decode fizzbuzz group_anagrams int_to_roman is_palindrome is_rotated license_number make_sentence merge_string_checker multiply_strings one_edit_distance rabin_karp reverse_string reverse_vowel reverse_words roman_to_int strip_url_params validate_coordinates word_squares
字符串的相关操作,包括转码、是否回文、倒置等
从上述方法可以看到,很多方法其实就是我们平时遇到的算法题,并不是最基本的操作。再强调一下,该模块主要用途应该是学习!而不是直接调用,对于某方法可以上官网查阅源码。