zoukankan      html  css  js  c++  java
  • Fisher-Yates shuffle algorithm

    The latest article from InterviewCake is about a very neat & elegant algorithm: Fisher-Yates shuffle algorithm

    Q: how to shuffle an array - in-place? 

    This algorithm is really simple to understand and works very well - you don't need too much words to learn, just the code (from InterviewCake):

    import random
    
    def get_random(floor, ceiling):
        return random.randrange(floor, ceiling + 1)
    
    def shuffle(the_list):
        # if it's 1 or 0 items, just return
        if len(the_list) <= 1:
            return the_list
    
        last_index_in_the_list = len(the_list) - 1
    
        # walk through from beginning to end
        for index_we_are_choosing_for in xrange(0, len(the_list) - 1):
    
            # choose a random not-yet-placed item to place there
            # (could also be the item currently in that spot)
            # must be an item AFTER the current item, because the stuff
            # before has all already been placed
            random_choice_index = get_random(index_we_are_choosing_for,
                                             last_index_in_the_list)
    
            # place our random choice in the spot by swapping
            if random_choice_index != index_we_are_choosing_for:
                the_list[index_we_are_choosing_for], the_list[random_choice_index] = 
                    the_list[random_choice_index], the_list[index_we_are_choosing_for]
  • 相关阅读:
    Python 标准库 urllib2 的使用细节
    为什么C++编译器不能支持对模板的分离式编译
    source insight插件
    tar命令
    绘制和重绘,有效矩形和无效矩形
    常量表达式
    区间迭代
    lambda函数
    decltype和新的返回值语法
    auto用法
  • 原文地址:https://www.cnblogs.com/tonix/p/8449212.html
Copyright © 2011-2022 走看看