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

erlang乱序一个List的方案

Jun 13, 2016 am 10:55 AM
erlang list hors service 方案 la plupart de maintenant 系统

最近在系统地看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>   

 

 

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

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

 

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La multiplication matricielle universelle de CUDA : de l'entrée à la maîtrise ! La multiplication matricielle universelle de CUDA : de l'entrée à la maîtrise ! Mar 25, 2024 pm 12:30 PM

La multiplication matricielle générale (GEMM) est un élément essentiel de nombreuses applications et algorithmes, et constitue également l'un des indicateurs importants pour évaluer les performances du matériel informatique. Une recherche approfondie et l'optimisation de la mise en œuvre de GEMM peuvent nous aider à mieux comprendre le calcul haute performance et la relation entre les systèmes logiciels et matériels. En informatique, une optimisation efficace de GEMM peut augmenter la vitesse de calcul et économiser des ressources, ce qui est crucial pour améliorer les performances globales d’un système informatique. Une compréhension approfondie du principe de fonctionnement et de la méthode d'optimisation de GEMM nous aidera à mieux utiliser le potentiel du matériel informatique moderne et à fournir des solutions plus efficaces pour diverses tâches informatiques complexes. En optimisant les performances de GEMM

Le système de conduite intelligent Qiankun ADS3.0 de Huawei sera lancé en août et sera lancé pour la première fois sur Xiangjie S9 Le système de conduite intelligent Qiankun ADS3.0 de Huawei sera lancé en août et sera lancé pour la première fois sur Xiangjie S9 Jul 30, 2024 pm 02:17 PM

Le 29 juillet, lors de la cérémonie de lancement de la 400 000e nouvelle voiture d'AITO Wenjie, Yu Chengdong, directeur général de Huawei, président de Terminal BG et président de la BU Smart Car Solutions, a assisté et prononcé un discours et a annoncé que les modèles de la série Wenjie seraient sera lancé cette année En août, la version Huawei Qiankun ADS 3.0 a été lancée et il est prévu de pousser successivement les mises à niveau d'août à septembre. Le Xiangjie S9, qui sortira le 6 août, lancera le système de conduite intelligent ADS3.0 de Huawei. Avec l'aide du lidar, la version Huawei Qiankun ADS3.0 améliorera considérablement ses capacités de conduite intelligente, disposera de capacités intégrées de bout en bout et adoptera une nouvelle architecture de bout en bout de GOD (identification générale des obstacles)/PDP (prédictive prise de décision et contrôle), fournissant la fonction NCA de conduite intelligente d'une place de stationnement à l'autre et mettant à niveau CAS3.0

Quelle version du système Apple 16 est la meilleure ? Quelle version du système Apple 16 est la meilleure ? Mar 08, 2024 pm 05:16 PM

La meilleure version du système Apple 16 est iOS16.1.4. La meilleure version du système iOS16 peut varier d'une personne à l'autre. Les ajouts et améliorations de l'expérience d'utilisation quotidienne ont également été salués par de nombreux utilisateurs. Quelle version du système Apple 16 est la meilleure ? Réponse : iOS16.1.4 La meilleure version du système iOS 16 peut varier d'une personne à l'autre. Selon les informations publiques, iOS16, lancé en 2022, est considéré comme une version très stable et performante, et les utilisateurs sont plutôt satisfaits de son expérience globale. De plus, l'ajout de nouvelles fonctionnalités et les améliorations de l'expérience d'utilisation quotidienne dans iOS16 ont également été bien accueillies par de nombreux utilisateurs. Surtout en termes de durée de vie de la batterie mise à jour, de performances du signal et de contrôle du chauffage, les retours des utilisateurs ont été relativement positifs. Cependant, compte tenu de l'iPhone14

Toujours nouveau ! Mises à niveau de la série Huawei Mate60 vers HarmonyOS 4.2 : amélioration du cloud AI, le dialecte Xiaoyi est si facile à utiliser Toujours nouveau ! Mises à niveau de la série Huawei Mate60 vers HarmonyOS 4.2 : amélioration du cloud AI, le dialecte Xiaoyi est si facile à utiliser Jun 02, 2024 pm 02:58 PM

Le 11 avril, Huawei a officiellement annoncé pour la première fois le plan de mise à niveau de 100 machines HarmonyOS 4.2. Cette fois, plus de 180 appareils participeront à la mise à niveau, couvrant les téléphones mobiles, les tablettes, les montres, les écouteurs, les écrans intelligents et d'autres appareils. Au cours du mois dernier, avec la progression constante du plan de mise à niveau de 100 machines HarmonyOS4.2, de nombreux modèles populaires, notamment Huawei Pocket2, la série Huawei MateX5, la série nova12, la série Huawei Pura, etc., ont également commencé à être mis à niveau et à s'adapter, ce qui signifie qu'il y aura davantage d'utilisateurs de modèles Huawei pourront profiter de l'expérience commune et souvent nouvelle apportée par HarmonyOS. À en juger par les commentaires des utilisateurs, l'expérience des modèles de la série Huawei Mate60 s'est améliorée à tous égards après la mise à niveau d'HarmonyOS4.2. Surtout Huawei M

Interface de sortie audio numérique sur la carte mère-SPDIF OUT Interface de sortie audio numérique sur la carte mère-SPDIF OUT Jan 14, 2024 pm 04:42 PM

Séquence des lignes de connexion SPDIFOUT sur la carte mère. Récemment, j'ai rencontré un problème concernant la séquence de câblage des fils. J'ai vérifié en ligne. Certaines informations indiquent que 1, 2 et 4 correspondent à la sortie, au +5 V et à la masse tandis que d'autres informations indiquent que 1, 2 et 4 correspondent à la sortie, à la masse et au +5 V ; La meilleure façon est de consulter le manuel de votre carte mère. Si vous ne trouvez pas le manuel, vous pouvez utiliser un multimètre pour le mesurer. Trouvez d’abord la terre, puis vous pourrez déterminer l’ordre du reste du câblage. Comment connecter le câblage VDG de la carte mère Lors de la connexion du câblage VDG de la carte mère, vous devez brancher une extrémité du câble VGA dans l'interface VGA du moniteur et l'autre extrémité dans l'interface VGA de la carte graphique de l'ordinateur. Attention à ne pas le brancher sur le port VGA de la carte mère. Une fois connecté, vous pouvez

Quels sont les systèmes d'exploitation informatiques ? Quels sont les systèmes d'exploitation informatiques ? Jan 12, 2024 pm 03:12 PM

Un système d'exploitation informatique est un système utilisé pour gérer du matériel informatique et des logiciels. C'est également un programme de système d'exploitation développé sur la base de tous les systèmes logiciels. Alors, quels sont les systèmes informatiques ? Ci-dessous, l'éditeur partagera avec vous ce que sont les systèmes d'exploitation informatiques. Le soi-disant système d'exploitation consiste à gérer le matériel informatique et les logiciels. Tous les logiciels sont développés sur la base des programmes du système d'exploitation. En fait, il existe de nombreux types de systèmes d’exploitation, notamment ceux à usage industriel, commercial et personnel, couvrant un large éventail d’applications. Ci-dessous, l'éditeur vous expliquera ce que sont les systèmes d'exploitation informatiques. Quels systèmes d'exploitation informatiques sont les systèmes Windows ? Le système Windows est un système d'exploitation développé par Microsoft Corporation des États-Unis. que le plus

Différences et similitudes des commandes cmd dans les systèmes Linux et Windows Différences et similitudes des commandes cmd dans les systèmes Linux et Windows Mar 15, 2024 am 08:12 AM

Linux et Windows sont deux systèmes d'exploitation courants, représentant respectivement le système Linux open source et le système Windows commercial. Dans les deux systèmes d'exploitation, il existe une interface de ligne de commande permettant aux utilisateurs d'interagir avec le système d'exploitation. Sur les systèmes Linux, les utilisateurs utilisent la ligne de commande Shell, tandis que sur les systèmes Windows, les utilisateurs utilisent la ligne de commande cmd. La ligne de commande Shell dans le système Linux est un outil très puissant qui peut effectuer presque toutes les tâches de gestion du système.

Explication détaillée de la façon de modifier la date système dans la base de données Oracle Explication détaillée de la façon de modifier la date système dans la base de données Oracle Mar 09, 2024 am 10:21 AM

Explication détaillée de la méthode de modification de la date système dans la base de données Oracle. Dans la base de données Oracle, la méthode de modification de la date système consiste principalement à modifier le paramètre NLS_DATE_FORMAT et à utiliser la fonction SYSDATE. Cet article présentera en détail ces deux méthodes et leurs exemples de code spécifiques pour aider les lecteurs à mieux comprendre et maîtriser l'opération de modification de la date système dans la base de données Oracle. 1. Modifier la méthode du paramètre NLS_DATE_FORMAT NLS_DATE_FORMAT correspond aux données Oracle

See all articles