今天介紹一個有趣的第三方模塊——algorithms,它提供用Python實現的一些算法和數據結構及其操作,不是簡單的基本操作哦。比如各種排序算法。主要目的是用來學習哈,不是生產和工作。
若想知道模塊中方法的源碼可以在官網查閱,上面有詳細的介紹,包括算法性能等:
https://algorithms.readthedocs.io/en/latest/index.html
模塊安裝方法:
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 | 字符串的相關操作,包括轉碼、是否迴文、倒置等 |
從上述方法可以看到,很多方法其實就是我們平時遇到的算法題,並不是最基本的操作。再強調一下,該模塊主要用途應該是學習!而不是直接調用,對於某方法可以上官網查閱源碼。