ホームページ 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CUDA の汎用行列乗算: 入門から習熟まで! CUDA の汎用行列乗算: 入門から習熟まで! Mar 25, 2024 pm 12:30 PM

General Matrix Multiplication (GEMM) は、多くのアプリケーションやアルゴリズムの重要な部分であり、コンピューター ハードウェアのパフォーマンスを評価するための重要な指標の 1 つでもあります。 GEMM の実装に関する徹底的な調査と最適化は、ハイ パフォーマンス コンピューティングとソフトウェア システムとハードウェア システムの関係をより深く理解するのに役立ちます。コンピューター サイエンスでは、GEMM を効果的に最適化すると、計算速度が向上し、リソースが節約されます。これは、コンピューター システムの全体的なパフォーマンスを向上させるために非常に重要です。 GEMM の動作原理と最適化方法を深く理解することは、最新のコンピューティング ハードウェアの可能性をより有効に活用し、さまざまな複雑なコンピューティング タスクに対してより効率的なソリューションを提供するのに役立ちます。 GEMMのパフォーマンスを最適化することで

ファーウェイのQiankun ADS3.0インテリジェント運転システムは8月に発売され、初めてXiangjie S9に搭載される ファーウェイのQiankun ADS3.0インテリジェント運転システムは8月に発売され、初めてXiangjie S9に搭載される Jul 30, 2024 pm 02:17 PM

7月29日、AITO Wenjieの40万台目の新車のロールオフ式典に、ファーウェイの常務取締役、ターミナルBG会長、スマートカーソリューションBU会長のYu Chengdong氏が出席し、スピーチを行い、Wenjieシリーズモデルの発売を発表した。 8月にHuawei Qiankun ADS 3.0バージョンが発売され、8月から9月にかけて順次アップグレードが行われる予定です。 8月6日に発売されるXiangjie S9には、ファーウェイのADS3.0インテリジェント運転システムが初搭載される。 LiDARの支援により、Huawei Qiankun ADS3.0バージョンはインテリジェント運転機能を大幅に向上させ、エンドツーエンドの統合機能を備え、GOD(一般障害物識別)/PDP(予測)の新しいエンドツーエンドアーキテクチャを採用します。意思決定と制御)、駐車スペースから駐車スペースまでのスマート運転のNCA機能の提供、CAS3.0のアップグレード

Apple 16 システムのどのバージョンが最適ですか? Apple 16 システムのどのバージョンが最適ですか? Mar 08, 2024 pm 05:16 PM

Apple 16 システムの最適なバージョンは iOS16.1.4 です。iOS16 システムの最適なバージョンは人によって異なります。日常の使用体験における追加と改善も多くのユーザーから賞賛されています。 Apple 16 システムの最適なバージョンはどれですか? 回答: iOS16.1.4 iOS 16 システムの最適なバージョンは人によって異なる場合があります。公開情報によると、2022 年にリリースされた iOS16 は非常に安定していてパフォーマンスの高いバージョンであると考えられており、ユーザーはその全体的なエクスペリエンスに非常に満足しています。また、iOS16では新機能の追加や日常の使用感の向上も多くのユーザーからご好評をいただいております。特に最新のバッテリー寿命、信号性能、加熱制御に関して、ユーザーからのフィードバックは比較的好評です。ただし、iPhone14を考慮すると、

常に新しい! Huawei Mate60シリーズがHarmonyOS 4.2にアップグレード:AIクラウドの強化、Xiaoyi方言はとても使いやすい 常に新しい! Huawei Mate60シリーズがHarmonyOS 4.2にアップグレード:AIクラウドの強化、Xiaoyi方言はとても使いやすい Jun 02, 2024 pm 02:58 PM

4月11日、ファーウェイはHarmonyOS 4.2 100台のアップグレード計画を初めて正式に発表し、今回は携帯電話、タブレット、時計、ヘッドフォン、スマートスクリーンなどのデバイスを含む180台以上のデバイスがアップグレードに参加する予定だ。先月、HarmonyOS4.2 100台アップグレード計画の着実な進捗に伴い、Huawei Pocket2、Huawei MateX5シリーズ、nova12シリーズ、Huawei Puraシリーズなどの多くの人気モデルもアップグレードと適応を開始しました。 HarmonyOS によってもたらされる共通の、そして多くの場合新しい体験を楽しむことができる Huawei モデルのユーザーが増えることになります。ユーザーのフィードバックから判断すると、HarmonyOS4.2にアップグレードした後、Huawei Mate60シリーズモデルのエクスペリエンスがあらゆる面で向上しました。特にファーウェイM

マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT Jan 14, 2024 pm 04:42 PM

マザーボード上の SPDIFOUT 接続線の順序 最近、ワイヤの配線順序に関する問題に遭遇しました。ネットで調べたところ、1、2、4がアウト、+5V、グラウンドに相当するという情報もあれば、1、2、4がアウト、グラウンド、+5Vに相当するという情報もありました。最善の方法は、マザーボードのマニュアルを確認することです。マニュアルが見つからない場合は、マルチメーターを使用して測定できます。最初にアースを見つけてから、残りの配線の順序を決定します。マザーボードの VDG 配線の接続方法 マザーボードの VDG 配線を接続するときは、VGA ケーブルの一端をモニターの VGA インターフェイスに差し込み、もう一端をコンピューターのグラフィックス カードの VGA インターフェイスに差し込む必要があります。マザーボードの VGA ポートに差し込まないよう注意してください。接続すると、次のことが可能になります

コンピュータのオペレーティング システムとは何ですか? コンピュータのオペレーティング システムとは何ですか? Jan 12, 2024 pm 03:12 PM

コンピュータ オペレーティング システムは、コンピュータ ハードウェアとソフトウェア プログラムを管理するために使用されるシステムです。また、すべてのソフトウェア システムに基づいて開発されたオペレーティング システム プログラムでもあります。オペレーティング システムが異なれば、ユーザーも異なります。では、コンピュータ システムとは何でしょうか?以下では、編集者がコンピューターのオペレーティング システムとは何かについて説明します。いわゆるオペレーティング システムはコンピュータのハードウェアとソフトウェア プログラムを管理するもので、すべてのソフトウェアはオペレーティング システム プログラムに基づいて開発されます。実際、OSには産業用、商業用、個人用など多くの種類があり、幅広い用途に対応しています。以下では、編集者がコンピューターのオペレーティングシステムとは何かについて説明します。 Windows システムとはどのようなコンピュータのオペレーティング システムですか? Windows システムは、米国 Microsoft Corporation によって開発されたオペレーティング システムです。ほとんどよりも

Oracleデータベースのシステム日付を変更する方法の詳細な説明 Oracleデータベースのシステム日付を変更する方法の詳細な説明 Mar 09, 2024 am 10:21 AM

Oracle データベースでのシステム日付の変更方法の詳細説明 Oracle データベースでのシステム日付の変更方法は、主に NLS_DATE_FORMAT パラメータの変更と SYSDATE 関数の使用です。この記事では、読者が Oracle データベースのシステム日付を変更する操作をよりよく理解し、習得できるように、これら 2 つの方法とその具体的なコード例を詳しく紹介します。 1. NLS_DATE_FORMAT パラメータメソッドの変更 NLS_DATE_FORMAT は Oracle データです

Linux と Windows システムにおける cmd コマンドの相違点と類似点 Linux と Windows システムにおける cmd コマンドの相違点と類似点 Mar 15, 2024 am 08:12 AM

Linux と Windows は 2 つの一般的なオペレーティング システムで、それぞれオープン ソースの Linux システムと商用 Windows システムを表します。どちらのオペレーティング システムにも、ユーザーがオペレーティング システムと対話するためのコマンド ライン インターフェイスがあります。 Linux システムでは、ユーザーはシェル コマンド ラインを使用しますが、Windows システムでは、cmd コマンド ラインを使用します。 Linux システムのシェル コマンド ラインは、ほぼすべてのシステム管理タスクを完了できる非常に強力なツールです。

See all articles