다음과 같은 Set<String>
개체가 있습니다.자바에서 문자열 키를 구문 분석하고 비교하는 가장 효율적인 알고리즘
"A_B_C_D_E_F_G",
"A_B_C_D_E_X_G",
"A_B_C_D_E_Z_G",
"A_B_C_X_Y_F_G",
"P_B_C_D_E_F_G",
"A_C_N_D_E_F_G"
... and 10,000 more
각 문자열은 밑줄로 구분 된 고유 ID 목록입니다. 하나가 UniqueID가 다르고, 경우
String[] uniqueIds = string.split("_");
은 내가 문자열이 함께 그룹화되어 Collection<String>
에 각각의 문자열을 넣어하고 싶은 것은 차이가 발생합니다 그래서 당신은 당신이이 같은 각 문자열 생각할 수 이해하는 데 도움이 같은 '열'에
그렇다면 우리는 내가이 그룹을 생성하는 가장 효율적인 방법을 알아 내려고 노력하고 있어요
Group1
"A_B_C_D_E_F_G",
"A_B_C_D_E_X_G", (because X is different than F)
"A_B_C_D_E_Z_G", (because Z is different than F, and because Z and X are
in the same column)
Group2
"P_B_C_D_E_F_G", (because P is different than A, and is not the same column as
in Group1)
Group3
"A_B_C_X_Y_F_G", (because X is different than D, and is not the same column as
in Group1 or Group2)
(because Y is different than E, and is not the same column as
in Group1 or Group2)
Group4
"A_C_N_D_E_F_G", (because C is different than B, and is not the same column as
in Group1 or Group2 or Group 3)
(because N is different than C, and is not the same column as
in Group1 or Group2 or Group 3)
발생할 수있는 다음과 같은 그룹 위의 예에서 Set<String>
개체를 통해 루프.
처음에는 내 생각 엔 빈 Map<someKey,Collection<String>>
으로 시작할 것입니다.
그런 다음 Set<String>
을 통해 루프는 UNIQUEID 배열에 각 문자열을 분할하고 해당 문자열이 현재 컬렉션에 속하거나 다른 someKey
으로 새 컬렉션에 들어가는 경우 말할 것 것 someKey
를 찾기 위해지도를 통해 이동합니다. 무엇 someKey
정의는 조금 까다 롭습니다 ... 어쩌면 그것은 첫 번째 문자열 이후 변경된 값을 가진 열 번호의 밑줄로 구분 된 목록일까요?
각 문자열에는 uniqueIds
이 많이 포함되어 있고 Set<String>
크기는 10,000 일 수 있으므로이 알고리즘은 느리게 진행될 수 있습니다.
제안 사항?
감사합니다.
UPDATE :::
이 문자열은 1 개 이상의 그룹에 들어갈 수있는 경우가 있습니다. 그렇다면 기준을 충족하는 첫 번째 가용 그룹에 배치됩니다.
왜 그룹 1에서 "A_B_C_D_E_F_G"가 그룹 2에서 발생하나요? 두 가지 모두에서 합법적 일 수 있습니까? 아니면 표시된 솔루션 만 올바른 해결책입니까? – Sign
압축 트리 또는 트리를 사용하는 것이 좋습니다. 그것은 희소일지도 모르지만 당신의 문제를 해결합니다. – DarthVader
@Sign - 두 그룹 중 하나 일 수 있습니다.그것을 다루는 가장 쉬운 방법은 처음에 사용 가능한 그룹에 붙이는 것입니다. – user973479