精灵旅社3 百度云资源百度云

11262人阅读
JAVASCRIPT(21)
JS 索引数组、关联数组和静态数组、动态数组&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:202834次
积分:2245
积分:2245
排名:第13306名
原创:60篇
转载:32篇
(2)(1)(1)(2)(1)(1)(4)(3)(1)(3)(2)(3)(11)(3)(32)(7)(1)(8)(6)如何输出一个数组的全排列? - 开源中国社区
当前访客身份:游客 [
当前位置:
数组为 &123456&
语言、方法都不限,大家各抒己见吧!
共有7个答案
<span class="a_vote_num" id="a_vote_num_
引用来自“redraiment”的答案组合数学的问题,C++ STL库自带next_permutation,C语言版参见:
http://www.oschina.net/code/snippet_
提供的递归算法不能处理1 1 2 3这种带重复元素的情况
针对你说的情况,我上面已经说了,存在调整。哈。
<span class="a_vote_num" id="a_vote_num_
组合数学的问题,C++ STL库自带next_permutation,C语言版参见:
http://www.oschina.net/code/snippet_
提供的递归算法不能处理1 1 2 3这种带重复元素的情况
--- 共有 5 条评论 ---
好吧 我明白了
(3年前)&nbsp&
: 我不是说递归不能处理1123这种情况,而是指1123会被输出两次。而真正的组合1123属于同一种情况,只要输出一次。
(3年前)&nbsp&
1123 是原数组,索引是1234,假设生成的排列是2134,那么按索引对应输出即可。
(3年前)&nbsp&
: 我的意思是1 1 2 3会出现两次,不管你是不是处理索引。
(3年前)&nbsp&
带重复元素的处理数组索引即可
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
引用来自“黑炭”的答案 抄上一段牛逼的erlang代码:
perms([]) -& [[]];
perms(L) -& [ [H | T] || H &- L, T &- perms(L -- [H])]. 哈。erlang 没学过。不过如果erlang都这么写代码,我决定就是闲得蛋疼,也不去了解它了。
<span class="a_vote_num" id="a_vote_num_
抄上一段牛逼的erlang代码:
perms([]) -& [[]];
perms(L) -& [ [H | T] || H &- L, T &- perms(L -- [H])].
--- 共有 2 条评论 ---
: 意思是从列表中任意取出一个元素(H&-L) 与 剩余的元素的全排列(T &- perm(L -- [H])) 组成新的列表的集合[H|T]。
|| “||”右边相当于生成器 ],大概就是这样子了。
(3年前)&nbsp&
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
该过节了。。。。。。
--- 共有 1 条评论 ---
过什么节?编不好,罚你加班
(3年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
递归方式描述, f(a0) = a0|f(A- {a0}) &任意属于A 的元素均参与。递归中,A = {a0}时,输出并返回。
基础动作包含 get_a(A) ,从当前集合中获取一个元素,由于所有数据在原始数组A0中,则实际存在另一个数组,B ,用于标记当前A0中所有数据被使用的情况。简单说,里面存放的值是当前待输出数组的偏移量。
一个简化算法是,在递归中的每一步,与具体数值无关(假设原数值两两不等,如果两两相等,可以做修正算法),与具体位置有关。因此,实际操作是针对B数组进行。
1、令B数组所有数值初始化为数组长度n。确定一个当前数值位置计数器i = 0,当前集合搜索位置p = 0-1;
2、另 B[p]如果存在,设置为n。p++;
3、针对i,从p位置查找B数组中,值大于i的位置,p' ,令B[p'] =如果找不到令i--,如果i & 0,则停机。
4、i++,如果i &= n,则依次打印 B[p] == 0 的对应A[p]。 打印后,i-- ,返回2。
对于c语言,则是
#define N 1024
static _i32 a[N];
static _I b[N];
//以上是空间定义部分
#define _init_b(b) do{_I for (i = 0 ; i & N ; i++) b[i] = N;}while (0)
#define _init_v(p,i) do {p = 0 - 1; i = 0;}while (0)
#define _init(b,p,i) do {_init_b(b);_init_v(p,i);}while (0)
#define _check_b(p) (p & N)
#define _set_p(b,p) do { if (_check_b(p){b[p] =}p++;}while (0)
#define _get_newp(b,p,i) do {_Ip = N; for (j = 0 ; j
N ; j++){\
if (b[j] & i){\
} }while(0)
//以上是局部操作部分
//以下是实际处理循环部分
_init(b,p,i);
while (1){
_set_p(b,p);
_get_newp(b,p,i);
if (_check_b(p)){
if (_check_b(i)){
print_array(a,b);
if (!_check_b(i)){
print_array并没有给出。这个函数没什么好写的。哈。&
对于 原始数组存在多个两两相同的数值时,实际需要调整B,此时B和A并非一一对应,同时B里每个元素包含两个内容,一个是当前位置对应数值,总共有几个。另一个是当前位置对应数值已经被使用了几个。对应get_newp等宏需要调整。
这里没有考虑一些工程型优化的问题。只是原型设计。哈。所以快不快,就不谈了。
--- 共有 7 条评论 ---
: 原来如此,呵呵
(3年前)&nbsp&
: 哈,我自己的类型定义而已,一个是32位带符号的,一个是32位不带符号的。不过通常_I是用于索引类型使用。和32位还没什么关系。
(3年前)&nbsp&
野鬼,_i32, _I,这是啥?也是宏定义吗?
(3年前)&nbsp&
: 哈。递归只是为了简单说明逻辑。其实非递归得设计更快。递归设计,函数写法需要更小心,各种数据测试还更麻烦。
(3年前)&nbsp&
将递归搞成循环果然复杂啊。。
(3年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
itfanr...的其它问题
类似的话题为什么从while循环中输出数组多了一个0,是开了索引的 - LabVIEW论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
为什么从while循环中输出数组多了一个0,是开了索引的
11:05:08  
为什么从while循环中输出数组多了一个0,是开了索引的
J`]JV(0M742I7JI03QYGMVQ.png (25.31 KB, 下载次数: 1)
11:03 上传
Q2TKUA$X048UO(98DXIVGX5.png (17.45 KB, 下载次数: 1)
11:03 上传
助理工程师
22:16:27  
自己开灯调试一下,很简单就看明白了!
22:28:43  
懂了,非常感谢
22:29:35  
自己开灯调试一下,很简单就看明白了!
懂了,非常感谢
助理工程师
11:41:32  
高亮或探针看数据,扛扛的。如果不好高亮就单独把那一块程序拿出来给个数值做高亮。
14:17:28  
高亮或探针看数据,扛扛的。如果不好高亮就单独把那一块程序拿出来给个数值做高亮。 ...
刚刚开始学习软件,还烦请多指导
10:46:16  
什么软件额& && && && && && && && && &
12:03:04  
什么软件额
Labview2012‘’‘’‘’
12:19:58  
Labview2012‘’‘’‘’
我学单片机的&&不知道你这个是干嘛的额,只知道是软件开发,一般具体干嘛用的都?
Powered by

我要回帖

更多关于 精灵旅社1高清百度云 的文章

 

随机推荐