由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个字符串比较排序的问题
相关主题
code questionAbout Longest repeated substring
请教如何使用qsort() to sort string.free(char *)的问题 (转载)
求改进小函数help on longest common substring
nv的显卡能战胜intel的CPU么为什么这个小程序错了?
which str_cmp code is better?Weird! string length problem.
大家看看这个简单的qsort排序的问题请帮忙看看这个字符函数的错误在哪里
strlen怎么实现的怎么判断int a[]的array的实际长度?
c++ string 一问C++ 初级再初级问题
相关话题的讨论汇总
话题: substrings话题: char话题: int话题: length话题: void
进入Programming版参与讨论
1 (共1页)
m******d
发帖数: 414
1
之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
void MaxDuplicatedSubstring(char *input, char *result)
{
int length = strlen(input);
char **substrings = new char**[length];
for (int i=0; i < length; i++)
substrings[i] = input + i;
qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
))strcmp);
int max = 0;
int index = -1;
for (int i=0; i < length - 1; i++)
{
int c = 0;
while (substrings[i][c] && substrings[i+1][c] && substrings[i][c] ==
substrin
i******t
发帖数: 370
2

~~~~~~~~~~~~"new char*"?
void*

【在 m******d 的大作中提到】
: 之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
: void MaxDuplicatedSubstring(char *input, char *result)
: {
: int length = strlen(input);
: char **substrings = new char**[length];
: for (int i=0; i < length; i++)
: substrings[i] = input + i;
: qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
: ))strcmp);
: int max = 0;

g*******y
发帖数: 1930
3
你这个sort,worst case 得有n^2*lgn甚至n^3吧?比如"aaaaaaaaaaaaa"
这个问题应该是用suffix tree是最佳的了, O(n)。
考虑到suffix tree写起来有些困难的话,退而求其次也应该用DP,很简洁的几句话就
能做到O(n^2)了。
m******d
发帖数: 414
4
之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
void MaxDuplicatedSubstring(char *input, char *result)
{
int length = strlen(input);
char **substrings = new char**[length];
for (int i=0; i < length; i++)
substrings[i] = input + i;
qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
))strcmp);
int max = 0;
int index = -1;
for (int i=0; i < length - 1; i++)
{
int c = 0;
while (substrings[i][c] && substrings[i+1][c] && substrings[i][c] ==
substrings[i+1][c]) c++;
if (c > max) {max = c; index = i;}
}
if (index >= 0)
memmove(result, substrings[index], max);
result[max] = 0;
delete [] substrings;
}
我试了一下,qsort后substrings和排序前的substrings一样。举例:for abcabc:
substrings排序前是{abcabc,bcabc,cabc,abc,bc, c},排序后还是{abcabc,
bcabc,cabc,abc,bc, c},而不是预期的{abc,abcabc,bc,bcabc,c,cabc}。
后来我自己写了个简单的冒泡排序代码来排序substrings,并对这个排序结果再运用一
遍qsort,发现还是回到最初的substrings。
难道这个qsort实质的排序对象是字符串地址而不是字符串内容?
谢谢大家赐教。
i******t
发帖数: 370
5

~~~~~~~~~~~~"new char*"?
void*

【在 m******d 的大作中提到】
: 之前有人贴出了常见的那个求Maximum repetitive substring的代码,如下:
: void MaxDuplicatedSubstring(char *input, char *result)
: {
: int length = strlen(input);
: char **substrings = new char**[length];
: for (int i=0; i < length; i++)
: substrings[i] = input + i;
: qsort(substrings, length, sizeof(char*), (int (*)(const void*, const void*
: ))strcmp);
: int max = 0;

g*******y
发帖数: 1930
6
你这个sort,worst case 得有n^2*lgn甚至n^3吧?比如"aaaaaaaaaaaaa"
这个问题应该是用suffix tree是最佳的了, O(n)。
考虑到suffix tree写起来有些困难的话,退而求其次也应该用DP,很简洁的几句话就
能做到O(n^2)了。
a***r
发帖数: 93
7

这题如果用DP来做,哪位给分析一下什么是subproblem?

【在 g*******y 的大作中提到】
: 你这个sort,worst case 得有n^2*lgn甚至n^3吧?比如"aaaaaaaaaaaaa"
: 这个问题应该是用suffix tree是最佳的了, O(n)。
: 考虑到suffix tree写起来有些困难的话,退而求其次也应该用DP,很简洁的几句话就
: 能做到O(n^2)了。

r*****s
发帖数: 51
8
a b c a b c
0 0 0 0 0 0 0
a 0 1 0 0 1 0 0
b 0 0 2 0 0 2 0
c 0 0 0 3 0 0 3
a 0 1 0 0 4 0 0
b 0 0 2 0 0 5 0
c 0 0 0 3 0 0 6
找非对角线上最大的数,即为最长重复序列的长度

【在 a***r 的大作中提到】
:
: 这题如果用DP来做,哪位给分析一下什么是subproblem?

1 (共1页)
进入Programming版参与讨论
相关主题
C++ 初级再初级问题which str_cmp code is better?
C++ STL map find does not work ???大家看看这个简单的qsort排序的问题
请问以下代码有什么错误?strlen怎么实现的
c questionc++ string 一问
code questionAbout Longest repeated substring
请教如何使用qsort() to sort string.free(char *)的问题 (转载)
求改进小函数help on longest common substring
nv的显卡能战胜intel的CPU么为什么这个小程序错了?
相关话题的讨论汇总
话题: substrings话题: char话题: int话题: length话题: void