首頁 php教程 php手册 erlang乱序一个List的方案

erlang乱序一个List的方案

Jun 13, 2016 am 10:55 AM
erlang list 亂序 方案 目前 系統

最近在系统地看erlang,目前以《erlang programming》为学习材料,看完前面七八章,试图写点东西,发现手足无措,能找到帮助的资料和文档也非常少。

 

其实我希望有人能一起来学习或讨论。

 

今日题目: 乱序一个List.

 

方法一: 一个较为精巧的乱序方案。

 

[php]  

-module(shuffle).  

-export([do/1]).                          

  

do(L) ->  

    Len = length(L),                      

    NL = lists:map(fun(X) -> {random:uniform(Len), X} end, L),  

    NLL = lists:sort(NL),                 

    [ V || {_,V}

 

 

其实这个问题挺困扰我的,变量一旦被赋值便不可修改,这个特性让原本写程序的想法和思路完全不同了。我上面的做法是,利用随机数生成一个[{Rand1,Elem1},...,{RandN,ElemN}]这样的列表。

然后再用sort排序后,重新打印出Elem出来,乱序的效果由此达到。

 

结果大概如下:

[php]  

45> c(shuffle).               

{ok,shuffle}  

46> shuffle:do([1,2,3,4,5]).  

[4,5,1,2,3]  

47> shuffle:do([1,2,3,4,5]).  

[2,1,5,3,4]  

48> shuffle:do([1,2,3,4,5]).  

[3,1,2,4,5]  

49> shuffle:do([1,2,3,4,5]).  

[1,5,2,3,4]  

50> shuffle:do([1,2,3,4,5]).  

[5,1,4,3,2]  

51>   

 

 

 

方法二:通用洗牌算法

 接上文,乱序一个List,我想原有的通用洗牌算法可行的。尝试写了另一个函数。经测试有效,但是我想肯定有优化的空间。代码的风格仍然透露着浓重的过程式思想吧。

 

%使用洗牌算法的方案                     

[php]  

do2(L) ->   

    do2(L,[]).  

  

do2([],L) ->  

    L;  

do2(L1,L2) ->  

    %io:format("L1=~w   L2=~w~n",[L1,L2]),     

    Len = length(L1),                     

    if   

        Len > 1 ->   

            NL = lists:split(random:uniform(Len-1), L1),  

            {[H1|T1],[H2|T2]} = NL,       

            NL2 = lists:flatten([T1],[H1|T2]),         

            L11 = lists:append(L2,[H2]),  

            do2(NL2, L11);  

        true ->  

            do2([],lists:append(L2,L1))  

    end.  

  

其结果为:  

128> c(shuffle).  

{ok,shuffle}  

129> shuffle:do2(lists:seq(0,9)).  

[9,2,5,1,8,0,7,3,6,4]  

130> shuffle:do2(lists:seq(0,9)).  

[8,3,6,5,7,4,9,0,2,1]  

131> shuffle:do2(lists:seq(0,9)).  

[5,3,7,8,1,9,0,6,2,4]  

132> shuffle:do2(lists:seq(0,9)).  

[3,0,5,2,1,6,8,4,9,7]  

133>   

 

 

有几点值得思考的,关于这两种方案,是否是真正的洗牌算法。每个数字出现在某个位置是否等概率呢。

还有其它的方法不,欢迎探讨。

 

 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

CUDA之通用矩陣乘法:從入門到熟練! CUDA之通用矩陣乘法:從入門到熟練! Mar 25, 2024 pm 12:30 PM

通用矩陣乘法(GeneralMatrixMultiplication,GEMM)是許多應用程式和演算法中至關重要的一部分,也是評估電腦硬體效能的重要指標之一。透過深入研究和優化GEMM的實現,可以幫助我們更好地理解高效能運算以及軟硬體系統之間的關係。在電腦科學中,對GEMM進行有效的最佳化可以提高運算速度並節省資源,這對於提高電腦系統的整體效能至關重要。深入了解GEMM的工作原理和最佳化方法,有助於我們更好地利用現代計算硬體的潛力,並為各種複雜計算任務提供更有效率的解決方案。透過對GEMM性能的優

华为乾崑 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 华为乾崑 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 Jul 30, 2024 pm 02:17 PM

7月29日,在AITO问界第四十万台新车下线仪式上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东出席发表演讲并宣布,问界系列车型将于今年8月迎来华为乾崑ADS3.0版本的上市,并计划在8月至9月间陆续推送升级。8月6日即将发布的享界S9将首发华为ADS3.0智能驾驶系统。华为乾崑ADS3.0版本在激光雷达的辅助下,将大幅提升智驾能力,具备融合端到端的能力,并采用GOD(通用障碍物识别)/PDP(预测决策规控)全新端到端架构,提供车位到车位智驾领航NCA功能,并升级CAS3.0全

常用常新!華為Mate60系列升級HarmonyOS 4.2:AI雲端增強、小藝方言太好用了 常用常新!華為Mate60系列升級HarmonyOS 4.2:AI雲端增強、小藝方言太好用了 Jun 02, 2024 pm 02:58 PM

4月11日,華為官方首次宣布HarmonyOS4.2百機升級計劃,此次共有180餘款設備參與升級,品類覆蓋手機、平板、手錶、耳機、智慧螢幕等設備。過去一個月,隨著HarmonyOS4.2百機升級計畫的穩定推進,包括華為Pocket2、華為MateX5系列、nova12系列、華為Pura系列等多款熱門機型也已紛紛展開升級適配,這意味著會有更多華為機型用戶享受到HarmonyOS帶來的常用常新體驗。從使用者回饋來看,華為Mate60系列機種在升級HarmonyOS4.2之後,體驗全方位躍升。尤其是華為M

主機板上的數位音訊輸出介面-SPDIF OUT 主機板上的數位音訊輸出介面-SPDIF OUT Jan 14, 2024 pm 04:42 PM

主機板上SPDIFOUT連接線序最近我遇到了一個問題,就是關於電線的接線順序。我上網查了一下,有些資料說1、2、4對應的是out、+5V、接地;而有些資料則說1、2、4對應的是out、接地、+5V。最好的方法是查看你的主機板說明書,如果找不到說明書,你可以使用萬用電表進行測量。首先找到接地,然後就可以確定其他的接線順序了。主機板vdg怎麼接線連接主機板的VDG接線時,您需要將VGA連接線的一端插入顯示器的VGA接口,另一端插入電腦的顯示卡VGA接口。請注意,不要將其插入主機板的VGA介面。完成連接後,您可以

蘋果16系統哪個版本最好 蘋果16系統哪個版本最好 Mar 08, 2024 pm 05:16 PM

蘋果16系統中版本最好的是iOS16.1.4,iOS16系統的最佳版本可能因人而異添加和日常使用體驗的提升也受到了很多用戶的好評。蘋果16系統哪個版本最好答:iOS16.1.4iOS16系統的最佳版本可能因人而異。根據公開的消息,2022年推出的iOS16被認為是一個非常穩定且性能優越的版本,用戶對其整體體驗也相當滿意。此外,iOS16中新功能的新增和日常使用體驗的提升也受到了許多用戶的好評。特別是在更新後的電池續航力、訊號表現和發熱控制方面,使用者的回饋都比較正面。然而,考慮到iPhone14

電腦作業系統有哪些 電腦作業系統有哪些 Jan 12, 2024 pm 03:12 PM

電腦作業系統就是用來管理電腦硬體和軟體程式的系統,同時也是根據所有軟體系統去開發的作業系統程序,而不同的作業系統,對應的使用人群也是不同的,那麼電腦系統有哪些呢?下面,小編跟大家分享電腦作業系統有哪些。所謂的作業系統就是管理電腦硬體與軟體程序,所有的軟體都是基於作業系統程式的基礎上去開發的。其實作業系統種類是很多的,用工業用的,商業用的,個人用的,涉及的範圍很廣。下面,小編跟大家講解電腦作業系統有哪些。電腦作業系統有哪些windows系統Windows系統是美國微軟公司所開發的作業系統。比最

Oracle資料庫中修改系統日期方法詳解 Oracle資料庫中修改系統日期方法詳解 Mar 09, 2024 am 10:21 AM

Oracle資料庫中修改系統日期方法詳解在Oracle資料庫中,修改系統日期的方法主要涉及修改NLS_DATE_FORMAT參數和使用SYSDATE函數。本文將詳細介紹這兩種方法及其具體的程式碼範例,幫助讀者更好地理解並掌握在Oracle資料庫中修改系統日期的操作。一、修改NLS_DATE_FORMAT參數方法NLS_DATE_FORMAT是Oracle數據

Linux與Windows系統中cmd指令的差異與相似之處 Linux與Windows系統中cmd指令的差異與相似之處 Mar 15, 2024 am 08:12 AM

Linux和Windows是兩種常見的作業系統,分別代表了開源的Linux系統和商業的Windows系統。在這兩種作業系統中,都存在著命令列介面,用於使用者與作業系統互動。在Linux系統中,使用者使用的是Shell命令列,而在Windows系統中,使用者使用的是cmd命令列。 Linux系統中的Shell命令列是一個非常強大的工具,可以完成幾乎所有的系統管理任

See all articles