`
wgcode
  • 浏览: 591475 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

AS3高效率随机化数组_效率对比

 
阅读更多

本帖最后由 xinyu126 于 2012-9-20 10:35 编辑

看了首页的帖子。
连接:http://bbs.9ria.com/thread-149910-1-1.html

发现帖子内容和我的已知相差很远。不得不写了一个测试,用事实来证明什么是真正高效率随机数组。

不管是as还是别的语言。这种方式都是最高效的。

看代码

 

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.getTimer;
        
        public class uilib extends Sprite
        {
                public function uilib()
                {
                        test(null);
                }
                
                private function test(evt:Event):void{
                        var len:int = 100000;
                        var arr:Array = new Array(len);
                        for(var i:int = 0; i<len;i++){
                                arr[i] = i;
                        }
                        
                        var start:int; 
                        var end:int;
                        
                        start = getTimer();
                        arr = func1(arr);
                        end = getTimer();
                        trace('func1=>',end-start);
                        
                        start = getTimer();
                        arr = func2(arr);
                        end = getTimer();
                        trace('func2=>',end-start);
                        
                        start = getTimer();
                        arr = func3(arr);
                        end = getTimer();
                        trace('func3=>',end-start);
                        
                        start = getTimer();
                        arr = func4(arr);
                        end = getTimer();
                        trace('func4=>',end-start);
                        
                        start = getTimer();
                        arr = func5(arr);
                        end = getTimer();
                        
                        trace('func5=>',end-start);
                }
                
                private function func1(rawArr:Array):Array{
                        rawArr.sort(function():Number{ return Math.random()-0.5>0?1:-1; });
                        return rawArr;
                }
                
                private function func2(array:Array):Array
                {
                        var newArray:Array = new Array();
                        while (array.length > 0)
                        {
                                newArray.push(array.splice(Math.floor(Math.random()*array.length), 1));
                        }
                        return newArray;
                }
                
                
                private function func3(myArray:Array):Array
                {
                        for (var i:uint = 0; i < myArray.length; i++)
                        {
                                var rand:uint = int(Math.random() * myArray.length);
                                myArray.push( myArray.splice( rand, 1 )[0] );
                        }
                        return myArray;
                }
                
                private function func4(myArr:Array):Array{
                        var rnd:int;
                        var tmp:*;
                        for(var i:uint = 0;i<myArr.length;i++){
                                tmp = myArr[i];
                                rnd = Math.random()*myArr.length;
                                myArr[i] = myArr[rnd];
                                myArr[rnd] = tmp;
                        }
                        return myArr;
                }
                
                private function func5(myArr:Array):Array{
                        var rnd:int;
                        var tmp:*;
                        var len:int = myArr.length;
                        for(var i:uint = 0;i<len;i++){
                                tmp = myArr[i];
                                rnd = Math.random()*len;
                                myArr[i] = myArr[rnd];
                                myArr[rnd] = tmp;
                        }
                        return myArr;
                }
        }
}

 

看运行结果:
func1=> 568
func2=> 4740
func3=> 9412
func4=> 53
func5=> 44
 数组的所有操作下标操作是最快的。这也是数组的最基本的结构了。其他的操作都是对索引的高级处理。除了pop和push,其他都很耗时间。 所以方法4比2,3快。
方法1是个例外,之前我判断失误。原本以为1会很慢,因为他还有函数调用。后来一想,人家内部就是一个循环,并且也是交换而已。肯定不能比2,3慢。
方法5是方法4的优化。所谓优化就是不要在循环里面去array的长度而已。所以for循环的时候用i--会比i++快。
分享到:
评论

相关推荐

    《PHP编程最快明白》第三讲:php数组_.docx

    1. **数组定义与初始化** 在PHP中,数组是一种存储多个值的数据结构。数组可以通过`array()`函数创建,例如: ```php $arr = array('a' =&gt; "你", 'b' =&gt; "我", "他"); ``` 或者使用简短语法: ```php $arr =...

    php中通过数组进行高效随机抽取指定条记录的算法

    这段代码首先初始化一个数组 `$input`,然后使用 `array_rand()` 抽取两个随机的键存储到 `$rand_keys` 中,最后通过键值访问数组元素并打印出来。 在实际应用中,比如从数据库中获取记录,我们可以先查询满足条件...

    as3蚁群算法

    AS3蚁群算法是一种在ActionScript 3(AS3)编程语言中实现的仿生优化算法,灵感来源于自然界中蚂蚁寻找食物的行为。蚂蚁通过释放信息素来与同伴沟通,找到从食物源到巢穴的最短路径。在计算领域,这种算法被用于解决...

    AS3版FLASH扫雷

    通过分析这些模块和源码,我们可以学习到AS3中的事件处理、类和对象的使用、数组操作、条件判断等基础知识,同时也能了解到如何利用Flash的图形和动画功能来提升用户体验。 总之,AS3版的FLASH扫雷游戏是一个集成了...

    从零开始学Python AI开发系列53-数据统计分析篇-Numpy数组1

    总结,Numpy是Python数据分析的基础,它的数组和丰富的函数库极大地提升了数据处理的效率。熟练掌握Numpy,无论是进行简单的数据操作还是复杂的AI开发,都将事半功倍。在接下来的学习中,我们将进一步探索Numpy的...

    Dim ds As New DataSet_java_

    标题中的“Dim ds As New DataSet_java_”是一个VB.NET代码片段,它声明并初始化了一个名为`ds`的数据集(DataSet)对象。数据集是.NET框架中的一个类,它用于存储和处理关系型数据,通常是从数据库中检索的。在Java...

    Numpy入门与实践(课件)

    这些函数通常针对数组进行矢量化操作,即一次运算即可应用到整个数组,大大提高了效率。 数组的索引和切片类似于 Python 的列表,支持单索引、切片和布尔索引。通过索引,可以访问和修改数组中的元素。此外,Numpy ...

    Python数据分析及可视化-81

    numpy库是Python中用于科学计算的核心库,它提供了一个高性能的多维数组对象——ndarray,以及对这些数组进行各种运算的函数。使用numpy库,我们可以高效地处理大量数据,尤其适合进行数值计算。在导入numpy库时,...

    科学计算工具numpy-ndarray的创建操作与数据类型(csdn)————程序.pdf

    `numpy` 是 Python 中用于科学计算的核心库,它提供了高性能的多维数组对象 `ndarray`,以及大量用于操作这些数组的函数。`ndarray` 是一个高效的数据结构,特别适合处理大型矩阵,它支持向量化操作,避免了使用 ...

    随机抽奖(VB6.0源代码编写)

    在实际项目中,还需要考虑一些其他方面,比如错误处理(如输入验证、空数组等)、数据持久化(保存和加载参与者列表)以及可能的并发问题(如果程序可能在多线程环境中运行)。此外,如果参与者数量非常大,可能需要...

    对python里NumPy库的详细描述及代码

    它通过提供高性能的多维数组对象以及一系列处理这些数组的功能,极大地提升了Python在数值计算方面的效率。 #### 二、核心特性 ##### 1. 多维数组对象 - **`ndarray`对象**:NumPy的核心是`ndarray`(n-...

    PHP-基于php实现的快速排序算法-QuickSort.zip

    快速排序的时间复杂度在平均情况下是O(n log n),最坏情况(如已排序数组)是O(n^2),但这种情况在实际应用中很少发生,因为可以通过随机化基准元素的选择来避免。空间复杂度主要取决于递归深度,一般为O(log n)。 ...

    ActionScript3.0开发人员指南

    - **数组基础知识**:介绍数组的概念,包括如何声明和初始化数组。 - **索引数组**:深入理解索引数组的工作原理,包括如何访问元素、修改数组内容以及使用循环进行迭代。 - **关联数组**:探讨如何使用键值对形式的...

    算法导论 英文版第三版 - Introduction to Algorithm

    - 随机化算法(Randomized Algorithms)在执行过程中使用随机选择的元素或决策,通常用以提升效率和性能。 - 排序算法(Sorting Algorithms)如堆排序和快速排序,是将数据项按照特定顺序进行排列的算法,对于数据...

    pytroch 简易介绍教程

    - **类似于NumPy**:对于熟悉NumPy的用户来说,上手PyTorch非常容易,两者在数组处理上有很高的相似度。 #### 三、PyTorch入门指南 ##### 3.1 安装PyTorch 可以通过Anaconda或pip来安装PyTorch。推荐使用Anaconda...

    K-means_聚类;k-means_

    1. **初始化**:选择K个初始质心,通常是随机选取数据集中的K个点作为起始聚类中心。 2. **分配**:对于数据集中每一个点,计算其与所有质心的距离,然后将其分配到最近的质心所对应的簇。 3. **更新**:根据簇内...

    python的数据分析与可视化.docx

    - **核心功能**:多维数组对象 `ndarray`、广播功能、矢量化操作等。 2. **Pandas** - **功能**:Pandas 是基于 NumPy 的一种工具,提供了大量用于数据处理和分析的函数和方法。 - **应用场景**:适用于结构化...

    Python绘图之二维图与三维图详解

    例如,我们可以创建一个一维数据集,如随机正态分布的数组,通过`plot()`函数将其绘制出来: ```python import numpy as np import matplotlib.pyplot as plt np.random.seed(1000) y = np.random.standard_normal...

    python常用插件1

    在Python的世界里,有一些不可或缺的库或插件,极大地提升了开发效率和数据分析能力。本篇文章将详细探讨标题提及的三个重要插件:NumPy、Matplotlib,以及它们在Python2.7.7环境中的应用。 NumPy是Python中用于...

Global site tag (gtag.js) - Google Analytics