设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
123
返回列表 发新帖
楼主: szzyc0
打印 上一主题 下一主题

[已经解决] 如何让15个变量随机代入1-15这15个不同的数字

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2007-9-4
帖子
251
21
发表于 2009-7-13 15:09:59 | 只看该作者
本帖最后由 新月の道化师 于 2009-7-13 15:18 编辑

弱弱的问下21L...
^=是什么意思,找了下米找到...
交换位置的方法总觉得有些怪怪的...偶还是觉得直接用hash最方便...

================
想了下子,偶觉得交换似乎是牺牲了时间复杂度换取空间复杂度的感觉,感觉还是从数组或者hash中抽取效率要高些...个人感觉>_<
[fly][/fly]
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

22
发表于 2009-7-13 15:27:41 | 只看该作者
本帖最后由 亿万星辰 于 2009-7-13 21:48 编辑

从来没想过用这样的方法来实现呢……
看了看确实有那么点意思~学习了~

这个交换变量值的方法第一次见,不错。

还有这个“改变动态数组的长度效率无论如何也比不上交换元素”这个是怎么知道的?
我测了一下效率是我那个方法的两倍~
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3309
在线时间
3620 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

23
发表于 2009-7-13 20:02:12 | 只看该作者
17# 越前リョーマ


如此说来,事件有何意义呢?
tommay 发表于 2009-7-13 08:34

意义在于事件也能完成这个事情。
你问的是如何完成,我这不完成了么?麻烦不等于无法完成。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

魔王 ⑨

梦石
0
星屑
95
在线时间
380 小时
注册时间
2006-10-16
帖子
4299

贵宾

24
发表于 2009-7-13 21:30:43 | 只看该作者
总之都在借帖聊天了 - - 说来我那个不好么,何必弄这么多复杂的算法呢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
25
发表于 2009-7-13 21:47:58 | 只看该作者
本帖最后由 紫苏 于 2009-7-13 23:40 编辑
弱弱的问下21L...
^=是什么意思,找了下米找到...
交换位置的方法总觉得有些怪怪的...偶还是觉得直接用hash最方便...
新月の道化师 发表于 2009-7-13 15:09

自异或运算,这是最高效的交换两个整数的方法~
两次异或相同的数后会得到原数,所以可以用来交换两个变量的值

浮点的话,则是用 +- 交换的方法~

想了下子,偶觉得交换似乎是牺牲了时间复杂度换取空间复杂度的感觉,感觉还是从数组或者hash中抽取效率要高些...个人感觉>_<
新月の道化师 发表于 2009-7-13 15:09

怎么会呢,从数组中抽取不也占用了一个数组嘛~最后得到的数也是需要空间占用的
而且就算换也是换了时间复杂度……

用了星子的那段代码,比较两个方法执行的时间,运算量大的时候就可以看出差别了:
  1. def genRandom1(n)
  2.   arr = Array.new(n)
  3.   for i in 0...arr.size
  4.     arr[i] = i
  5.   end
  6.   i = n - 1
  7.   begin
  8.     r = rand(i)
  9.     arr[i] ^= arr[r]
  10.     arr[r] ^= arr[i]
  11.     arr[i] ^= arr[r]
  12.   end until (i -= 1) < 1
  13.   return arr
  14. end

  15. def genRandom2(n)
  16.   array = (0...n).to_a
  17.   result = []  
  18.   n.times{result.push(array.delete_at(rand(array.size)))}
  19.   return result
  20. end

  21. a = Time.now
  22. genRandom1(60000)
  23. p Time.now - a

  24. a = Time.now
  25. genRandom2(60000)
  26. p Time.now - a
复制代码
动态数组也是线性数据结构,底层还是静态的顺序数组,当数组需要插入/删除元素时,就会有一个线性的批量元素替换,比如插入时从插入点往后的元素依次后移,删除时则是依次往前移~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

26
发表于 2009-7-14 08:49:49 | 只看该作者
研究到这么深的层次了,厉害……  = =|||
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

27
发表于 2009-7-14 09:07:45 | 只看该作者
我是来飘的,无法想像LZ看到3页回帖时的表情
不知道用Table效率如何
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦·贤者

梦石
0
星屑
50
在线时间
1141 小时
注册时间
2007-12-15
帖子
4100
28
发表于 2009-7-14 09:38:19 | 只看该作者
我是一块砖,每每有这种技术贴,我都是用来抛的= =
http://rpg.blue/home.php?mod=space&uid=34951&do=blog&id=12799
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-11 20:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表