python——algorithms模塊

今天介紹一個有趣的第三方模塊——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 字符串的相關操作,包括轉碼、是否迴文、倒置等

從上述方法可以看到,很多方法其實就是我們平時遇到的算法題,並不是最基本的操作。再強調一下,該模塊主要用途應該是學習!而不是直接調用,對於某方法可以上官網查閱源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章