[질문]메모리에서 문자열 찾기.. 알려주세요..
글쓴이: leolo / 작성시간: 일, 2004/09/12 - 7:57오후
지금 저에게 필요한 것은 이런것입니다.
얘를 들어, 12345678 을 던져주면 앞에서 부터 값을 비교하겨 가장 길이가 긴 데이터를 메모리에서 찾는 것입니다.
즉, 메모리에
1, 12, 134, 123이 있는 경우는 123을 찾고,
1, 12345, 123, 1234 가 있으면 12345를 찾고,
1, 142, 143, 1238 이 있으면 1을 찾는 것입니다.
이와 관련된 코드나 아이디어, 또는 참조할 만한 프로젝트가 있으면 좀 부탁드립니다.
Forums:
ㅡㅡa문자열의 길이를 오름차순으로 정렬해놓으시면 됩니다..
ㅡㅡa
문자열의 길이를 오름차순으로 정렬해놓으시면 됩니다..
12345 1234 123 12 가있다고 칠때..
오름차순으로 데이타를 정렬해논경우는 맨첨에 12란 데이터로
검색시 strncmp( "12", "12345", strlen( "12" ) ) == 0 시에
리턴하면됩니다..
오름차순으로 정렬한 다음 strncmp로 또 비교하는 것은 매우 비효율적
오름차순으로 정렬한 다음 strncmp로 또 비교하는 것은 매우 비효율적입니다. 그냥 한번에 스캔하면서 최대값을 비교해도 충분합니다.
오름차순으로 정렬한다는 문구는 오름차순을 매번 정렬한다는 의미가 아니었습
오름차순으로 정렬한다는 문구는 오름차순을 매번 정렬한다는 의미가 아니었습니다만.. 자료구조자체를 항상 오름차순으로 유지를 해야한다는 의미였습니다..
결론을 내었습니다.
결론을 내었습니다.
링크드리스트로 새로운 노드를 추가할 때, 항상 오름차순으로 정렬하고,
인덱싱을 두어 바스켓을 구성하는 것입니다.
예를 들어,
21
223
234
34
345
356
의 데이터가 있으면,
바스켓을 2개 구성하여 메모리에 올리고, 이들을 오름차순으로 정렬하는 형태를 취합니다. 즉, 2로 시작하는 데이터를 담음 링크는 234, 223, 21로 정렬되고, 데이터가 들어오면, 차례대로 비교합니다.
노드는
typedef strunt _node
{
char number[10];
int len
strunt _node* next;
};
이렇게 구성하면 될것 같습니다.
감쏴합니다.
실력이 있으면 삶이 편하다... 영차 영차...
..
굳이 정렬을 할 필요가 없을지도..
딴지는 아닙니다.. 버그가 있군요 ㅡㅡa len..정렬하고 버킷을
딴지는 아닙니다.. 버그가 있군요 ㅡㅡa len..
정렬하고 버킷을 만드시는 이유는 데이터량이 많을경우
속도 때문에 그러시는것같은데요..
매번 순차검색하시는건 부담스러운 작업이라 그런게 아니신가 싶습니다..
[quote="Anonymous"]딴지는 아닙니다.. 버그가 있군요 ㅡㅡ
[quote="Anonymous"]딴지는 아닙니다.. 버그가 있군요 ㅡㅡ
..
에고..로그인 안하고 글썼더니..
실수로 글 2개 올렸는데 삭제가 안되는 듯 --;
memcmp( token, str[i], num); 이부분 맞는부
memcmp( token, str[i], num);
이부분 맞는부분인가요 num 은 길이는 아닌것같은데 해서
적어봤습니다.. 소스를 세세히 안보구 그냥 훌터보다가 그런거같아서.. ㅡㅡa
p.s 네 손님 편하긴한데.. 답글 잘못올리면 삭제가 안되는 안타까운점이
p.s 네 손님 편하긴한데.. 답글 잘못올리면 삭제가 안되는 안타까운점이 ㅡㅡa
요즘 로긴거의 안하는데.. 손님기능 장단점이 있는듯.. ^^;;
..
아 맞습니다.. 수정했습니다^^
std::multiset을 사용하면 간단하죠.
자료구조 자체를 항상 오름차순으로 유지하려면, 트리를 사용하면 간단합니다.
다음 코드는 ANSI C++ STL의 multiset 컨테이너와 equal, find_if 알고리듬을 써서 작성해 본 것입니다.
실행 결과는 다음과 같습니다.
댓글 달기