gpt4 book ai didi

c - 使用整数表示排列顺序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:38 24 4
gpt4 key购买 nike

假设有 N (N=10) 个字母 A、B、...、J。字符串 S 是排列的一个实例。

我想存储一个32位整数p的排列顺序,并在字符串S和顺序p之间进行转换>,为了验证整数值,我写了这样的东西:

int S2P(char *s) {
unsigned int p = 0;
char c;
while (c = *s++) {
c -= 'A';
p *= 10;
p += c;
}
return p;
}

char *P2S(unsigned int p, char *buf) {
char *s = buf + 10;
char used[20], *t;
int i, j, c;
strcpy(used, "ABCDEFGHIJ");
*s-- = '\0';
for (i = 1; i < 10; i++) {
*s-- = c = 'A' + (p % 10);
p /= 10;
t = strchr(used, c);
if (t)
*t = '-';
}
for (i = 0; i < 10; i++)
if (used[i] != '-')
*s = used[i];
return buf;
}

int PCheck(int p) {
char tmp[20];
int q = S2P(P2S(p, tmp));
return p == q;
}

它的工作效率不高。也就是说,

  1. 无法再添加一个字母。 (最大值(N)= 10)
  2. P2S 中,使用了一个额外的查找表来找出第 10 个字母。
  3. PCheck(int) 太慢了。

如何让它变得更好?一段直接的代码表示赞赏。

最佳答案

Is there any better algorithm?

查看 Knuth's TAOCP第 4 卷第 2 册,生成所有元组和排列(不过我认为它很快就会以实体书的形式出版)。他在那里解决了这个问题。

关于c - 使用整数表示排列顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com