- 浏览: 335996 次
- 性别:
- 来自: 北京
文章分类
最新评论
# Timing different way to shuffle an array in ruby
class Array # The ruby way of swapping two variable values def swap!(a,b) self[a], self[b] = self[b], self[a] end
# the "assembler" way of swapping two variable
values
def swap_with_int_var!(a,b) c = self[a] self[a] = self[b] self[b] = c end
# Shuffling arrays is usually done by iterating through the
indices, and swapping
# each value with a value at a random position
# shuffling based on push/delete
def shuffle! size.downto(1) { |n| push delete_at(rand(n)) } self end
# shuffling with the ruby way of swapping
def shuffle_II (size-1).downto(1) { |n| swap!(n, rand(size)) } self end
# shuffling with the "assembler" way of swapping
def shuffle_III (size-1).downto(1) { |n| swap_with_int_var!(n, rand(size)) } self end
def shuffle_IV sort_by { rand } end
def shuffle_V (length - 1).downto 1 do |slot| source = rand(slot + 1) self[slot], self[source] = self[source], self[slot] end self end end
def time_shuffle_method(size) a = (0..size).to_a start_time = Time.new 3000.times { yield a } end_time = Time.new return end_time - start_time end
# To inspect shuffling methods, invoke with argument "test"
and optionally, size
if (ARGV[0] == 'test') size = ARGV[1] ? ARGV[1].to_i : 5 puts (0..size).to_a.shuffle! puts '--' puts (0..size).to_a.shuffle_II puts '--' puts (0..size).to_a.shuffle_III puts '--' puts (0..size).to_a.shuffle_IV puts '--' puts (0..size).to_a.shuffle_V exit end
shuffle_time = time_shuffle_method(500) { |a| a.shuffle! } puts "Time elapsed for shuffle! : #{shuffle_time}" shuffle_time_II = time_shuffle_method(500) { |a| a.shuffle_II } puts "Time elapsed for shuffle_II : #{shuffle_time_II}" shuffle_time_III = time_shuffle_method(500) { |a| a.shuffle_III } puts "Time elapsed for shuffle_III : #{shuffle_time_III}" shuffle_time_IV = time_shuffle_method(500) { |a| a.shuffle_IV } puts "Time elapsed for shuffle_IV : #{shuffle_time_IV}" shuffle_time_V = time_shuffle_method(500) { |a| a.shuffle_V } puts "Time elapsed for shuffle_V : #{shuffle_time_V }"
=begin Here are results from running on my machine Conclusion: fancy ruby manipulations take their time Stick with the "ordinary" shuffle implementation ( shuffle_III ) stephan@[~/ruby/steam]: ruby /tmp/shuffle_timer Time elapsed for shuffle! : 4.352824 Time elapsed for shuffle_II : 6.03016 Time elapsed for shuffle_III : 3.088946 Time elapsed for shuffle_IV : 3.890105 Time elapsed for shuffle_V : 6.351477 stephan@[~/ruby/steam]: ruby /tmp/shuffle_timer Time elapsed for shuffle! : 4.382251 Time elapsed for shuffle_II : 6.046666 Time elapsed for shuffle_III : 3.220461 Time elapsed for shuffle_IV : 4.00079 Time elapsed for shuffle_V : 6.292253 =end
发表评论
-
新博客
2012-04-23 20:47 1760https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2054Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 2010最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2274Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2272Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3863普通情况下ruby调用系统命令行的过程是堵塞的,无论是用sys ... -
test
2011-07-15 19:59 0test -
fiber
2011-06-17 09:37 0挖坑,待填。。 1.用到fiber.alive?、fiber ... -
Identity Map in Rails3.1
2011-06-12 18:29 2741Identity Map是Rails3.1的又 ... -
xx00
2011-06-06 03:40 0https://github.com/ngmoco/cache ... -
挖坑1
2011-06-06 02:17 0cache money 源码 替换memcache为redis ... -
websocket demo
2011-06-04 20:44 2057地址:https://github.com/hooopo/we ... -
ruby GC
2011-06-02 04:24 0http://blog.csdn.net/lijun84/a ... -
reduce method missing call stack with dynamic define method
2011-04-22 22:54 1596method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1678像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18939工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4483地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 30261.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1214这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2831Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
leetcode伪代码suffle_the_array 题目解读: 题目来源: 原文: Given the array nums consisting of 2n elements in the form [x1,x2,...,xn,y1,y2,...,yn]. Return the array in the form [x1,y1,x2,y2,...,xn,yn]. ...
for i in range(10): array = np.vstack((array, [i+1, i+1])) print(array) # [[ 0 0] # [ 1 1] # [ 2 2] # [ 3 3] # [ 4 4] # [ 5 5] # [ 6 6] # [ 7 7] # [ 8 8] # [ 9 9] # [10 10]] rand_arr = np.arange...
- `in_array()`: 检查数组中是否存在指定的值。 - `explode()`: 使用分隔符将字符串拆分为数组。 - `array_key_first()` 和 `array_key_last()`: 分别获取数组的第一个和最后一个键。 - `end()`: 将数组内部指针移动...
与方法一类似,但这里使用了`in_array()` 函数来检查新生成的随机数是否已经存在于数组中。 **示例代码解析:** ```php $tmp = []; while (count($tmp) ) { $a = rand(1, 20); if (!in_array($a, $tmp)) { $tmp...
_.map(list, iterator, [context]) Alias: collect Produces a new array of values by mapping each value in list through a transformation function ( _.reduce(list, iterator, memo, [context]) Aliases: ...
1. 键/值操作:`array_values()`返回数组值,`array_keys()`返回键,`in_array()`检查值是否在数组中,`array_flip()`交换键和值,`array_reverse()`反转数组。 2. 统计函数:`count()`计算数组元素数量,`array_...
leetcode伪代码shuffle-string 题目解读: 题目来源: 原文: Given a string s and an integer array indices of the same length. The string s will be shuffled such that the character at the ith position ...
它们与其它数组函数,如`array_unique()`、`array_key_exists()`、`array_pop()`、`in_array()`、`shuffle()`、`array_rand()`、`array_splice()`、`array_sum()`等,共同构成了PHP强大的数组处理工具集,使得处理...
要判断数组中是否存在某个值,可以使用in_array()函数。而对于判断数组中是否存在某个键,则可以使用array_key_exists()函数。 9、数组切片操作 PHP中没有专门的函数来实现数组切片操作,但是可以通过循环和条件...
- `in_array()`检查元素是否存在于数组中。 - `array_flip()`交换数组的键和值。 - `array_reverse()`反转数组。 2. 统计函数: - `count()`计算数组元素个数。 - `array_count_values()`统计数组中每个值出现...
echo "Atlanta exists as a value in the capitals array."; } ``` 10、使用数组键访问数组值:访问关联数组中的元素非常简单,只需要通过键来获取值。例如: ```php echo $capitals['Alabama']; // 输出: ...
#### 概述 ...通过对这些函数的理解与掌握,可以帮助开发者更加高效地完成任务、解决问题。 #### 详细知识点解析 ##### 数组操作函数 ...1. **array_change_key_case** ... - **示例**:`$new_arr = array(1, ...
#### 一、Array 函数 ...以下是一些常用的数组处理函数及其...25. **in_array**:检查数组中是否存在某个值。 - 参数: - `$value`:要检查的值。 - `$array`:目标数组。 - 示例代码: ```php $array = [1, 2, ...
- **in_array()**: 判断一个值是否存在于数组中。 - **array_search()**: 返回数组中某个值的键名,如果值不存在,则返回 `false`。 #### 排序(Sort) 排序函数可以按不同的规则对数组进行排序。 - **sort()**: ...
例如,`in_array('value', $array)` 检查 'value' 是否在 `$array` 中。 12. **array_key_exists**:此函数检查数组中是否存在特定的键,返回布尔值。 13. **array_search**:在数组中搜索给定的值,返回第一个...
④ Read all the pictures in the folder, read the pictures as data, change the picture size, convert it into array, and label the pictures ⑤ Divide the training set and test set, and encode the tag ...
- **`in_array()`**:检查数组中是否存在某个值。 - **`key()`**:返回数组中的当前键名。 - **`krsort()`**:对数组按照键名进行逆向排序。 - **`ksort()`**:对数组按照键名进行排序。 - **`list()`**:将数组元素...
- **in_array()**:检查数组中是否存在某个值。 - **next()**:将数组的内部指针向前移动一步。 - **prev()**:将数组的内部指针向后移动一步。 - **range()**:创建一个包含指定范围的数组。 - **reset()**:将数组...
- **`in_array()`**: 检查数组中是否存在某个值。 - **`key()`**: 返回数组中的当前键。 - **`list()`**: 将数组元素赋值给一组变量。 - **`next()`**: 将内部指针指向数组的下一个元素。 - **`pos()`**: 返回数组中...