自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

番外篇:分享一道用Python基礎+蒙特卡洛算法實現(xiàn)排列組合的題目(附源碼)

開發(fā) 后端 算法
我是Python進階者。本文基于粉絲針對排列組合問題的提問,給出了一個利用Python基礎+蒙特卡洛算法的解決方案,基本上可以達到了粉絲的要求。

[[433811]]

大家好,我是Python進階者。

是不是覺得很詫異?明明上周剛發(fā)布了這篇:分享一道用Python基礎+蒙特卡洛算法實現(xiàn)排列組合的題目(附源碼),今天又來一篇,名曰番外篇!其實今天是想給大家分享【🌑(這是月亮的背面)】大佬的解法,拍案叫絕!

前情回顧

前幾天在才哥交流群里,有個叫【Rick Xiang】的粉絲在Python交流群里問了一道關于排列組合的問題,初步一看覺得很簡單,實際上確實是有難度的。

題目是:一個列表中有隨機15個數(shù),沒有重復值。從列表里面任意選5個數(shù),如何選出來包含a, a+1的所有組合。a可以是15個數(shù)中的任意一個。

關于思路和解決方法,這篇文章分享一道用Python基礎+蒙特卡洛算法實現(xiàn)排列組合的題目(附源碼)中提供了【張老師】和【有點意思】大佬的想法和解決方案,一共有5份代碼,足夠大家學習了,感興趣的小伙伴快去學習吧,干貨滿滿。

二、新代碼

上周五的時候,發(fā)布了這篇分享一道用Python基礎+蒙特卡洛算法實現(xiàn)排列組合的題目(附源碼)原創(chuàng)文章,很慶幸還有粉絲親自實踐,并給出了建設性的方案,如下圖所示。

這里先給出【🌑(這是月亮的背面)】大佬的偽代碼,這樣看上去大家也更加好理解一些。

  1. # -*- coding: utf-8 -*- 
  2. # 模塊化 
  3. import random 
  4. import numpy as np 
  5. import time 
  6.  
  7.  
  8. # 取出隨機的15個數(shù)值 
  9. def get_random15(): 
  10.     random_array = [np.array(random.sample(range(2000), 15)) for i in range(100000)] 
  11.     random5 = {get_random5(random15) for random15 in random_array} 
  12.     return [i for i in random5 if i] 
  13.  
  14.  
  15. # 遍歷隨機的15個數(shù)值,取相鄰的兩個隨機數(shù),判斷后返回滿足條件的值 
  16. def get_random5(random_15): 
  17.     random_5 = set(random_15[random.sample(range(15), 5)])  # np.array的索引替換choice取值 
  18.     # 利用set特性判斷元素是否含有給定的元素 
  19.     random_5_resp = {True if len(random_5.intersection({num, num + 1})) == 2 else False for num in random_5} 
  20.     return tuple(random_5) if True in random_5_resp else () 
  21.  
  22.  
  23. if __name__ == '__main__'
  24.     start_time = time.time() 
  25.     final_result = get_random15() 
  26.     print("共%d個符合題意的列表" % len(final_result)) 
  27.     print("分別是:%s" % final_result) 
  28.     end_time = time.time() 
  29.     used_time = end_time - start_time 
  30.     print() 
  31.     print("本次程序用時:{}".format(time.strftime('%H(小時):%M(分鐘):%S(秒)'time.gmtime(used_time)))) 

這個代碼寫的真的很好,沒有Python基礎的小伙伴看上去肯定有些吃力的,小編自己初看的時候,也覺得有點難以吸收,需要多看幾遍,領悟。

這個代碼親測有效,用之前的代碼大概需要12秒,改用這個只需要1.5秒。

他這里做了三個優(yōu)化,其一是之前從15個數(shù)中隨機取5個值耗時較長,這里用使用了numpy.array的特性來優(yōu)化代碼,在科學計算中,可以省掉很多循環(huán)語句,代碼使用方面比Python列表簡單,Python list 無法直接運算, Numpy Array 可直接運算;其二是刪除了之前的去重函數(shù),這里他也用set去優(yōu)化,所以在這塊也節(jié)約了時間;其三是使用了集合的交集運算(Intersection),較之前的if判斷來說,節(jié)約了時間。

想到這里,不得不感嘆一下,【人生苦短,我用python】!

三、總結

我是Python進階者。本文基于粉絲針對排列組合問題的提問,給出了一個利用Python基礎+蒙特卡洛算法的解決方案,基本上可以達到了粉絲的要求。

不過話說回來,這個方案雖是當下最優(yōu),但不是永遠最優(yōu)。

 

責任編輯:姜華 來源: Python爬蟲與數(shù)據(jù)挖掘
相關推薦

2021-11-05 09:01:15

Python算法Python基礎

2021-11-10 07:47:49

Python源碼代碼

2021-08-20 10:12:35

Python蒙特卡洛股票

2024-12-13 16:11:01

2025-02-24 10:15:00

2018-03-13 16:04:45

Promise執(zhí)行順序

2021-03-02 11:29:50

算法算法分析前端

2021-08-23 11:15:20

Python機器學習bilibili

2021-08-21 14:30:58

機器學習bilibili股價

2009-08-11 15:09:44

一道面試題C#算法

2025-02-13 09:34:13

2012-05-18 11:17:58

Java多線程

2023-04-12 15:58:58

2009-08-11 10:12:07

C#算法

2024-05-09 08:33:33

2024-08-19 08:45:00

開源模型

2024-12-11 08:12:24

2023-10-27 13:05:23

模型訓練

2009-08-11 14:59:57

一道面試題C#算法

2024-03-18 13:32:11

點贊
收藏

51CTO技術棧公眾號