알고리즘?? 인지 모르겠는데 질문있음

만약 예를들어서

1, 2, 3, 4, ,5 ... n 개의 공이 있어


근데 1번 공을 고르면 2, 5, 6..의 공을 고를 수 없고


2번 공을 고르면 3 ,12, 1, 5 ...의 공을 고를 수 없어


이렇게 n개의 공마다 조건이 붙어 있는 상태에서


최대한 많은 공을 고를려면 으떠케 풀어야대??


단, 선택할 공과 그 공과 같이 고를 수 없는 공 사이의 관계는 없어.


어디 뭐 문제 풀려고 여기 가져온게 아니라 갑자기 생각나서 쓴 글이야.


알려주면 고맙겠엉!

26개의 댓글

2018.06.20
N제한이 중요한데 n이 작으면 부르트포스로 풀면될거같음
0
2018.06.20
@STM8a
고마워! 근데 고것말고.. 다른방법이 궁금해서....
0
2018.06.20
@차고보
백트래킹 말고는.. permutation으로 조합쭉 만들어서 가능성체크 해도될것같음
0
2018.06.20
@STM8a
1번공 뽑아보고 2번공을 뽑는다 가정해보고 가능할시 3번공도 뽑아봄. 불가능하다 하면 2번공을빼고 3번공을 집는다 가정해보고 진행

백트래킹으로 풀면될것같음
0
[삭제 되었습니다]
2018.06.20
@7ebf0a9aᅟᅟᅟᅟ
당연히 이상할수도 있지.. 걍 방금 생각나서 적은거라....
0
2018.06.20
이거 N-Queen문제인가 그거랑 비슷할 거 같은데
0
2018.06.20
@렙 개드리퍼
고건 윗게이가 말한 백트래킹인디 고 방법 말구 다른데 궁금했엉!
0
2018.06.20
공을 고르는 순서는 중요하지 않은거같으니깐
비트마스크(또는 string key) + 메모이제이션쓰면 될듯

1뽑고 1을 뽑은뒤 가능한 것들에 대해 다 뽑음.
2도 뽑을 수 있으면 2뽑은 뒤 가능한 것들에 대해 다 뽑음.
뽑을 수 없는데까지 간 뒤 다시 버퍼를 비우고 2부터 다시 뽑음
이미 구해져있다면 구해진 값을 사용

간단한 예시로 공 8개중에 1,2,5,6을 뽑았고 더이상 뽑을게 없다면
m[11001100] = possible
이렇게 나타낼 수 있음

자료구조는 해시맵 같은거 쓰면 될거같고


1에선 2가 안되고 2에선 1이 되고 이런규칙이 생기면 다른 방법을 써야 할 듯
0
2018.06.20
@HIGH SIERRA
a번 공을 뽑았을땐 b번공이 안댄다 <-> b번공을 뽑았을때 a번 공이 안댄다.
이건 당연하다 생각 했었어 근데 그런 조건을 넣을수도 있겠네

그리고 n을 그래도 1000?개 정도 생각하고 있었어...
0
2018.06.20
@차고보
상관없지않음?
n이 천이어도 저건
공간복잡도 n^2이니깐
백만
0
djd
2018.06.20
@HIGH SIERRA
시간복잡도가 2^n이 되는 거 아니야?,

여기서 비트DP를 밀고 나가서 최적화를 더 하면 2^(n/2)까진 될 거 같긴 한딩...
0
2018.06.20
@djd
그러넹..
0
2018.06.20
공이 아닌 점이라 생각하고
규칙이 점과 점에 선분이 놓아져잇다하면
최대한 많은 점을 잇는 문제임
한붓그리기 또는 다리건너기로 찾아보면 될듯

문제는 1번점은 3번점으로 이어지는데
3번점은 1번으로 안이어진다던가 이런 일방통행규칙이 어려운 부분이 될것같음

아니면 한점에서 다른점으로 가는 출발의 가짓수가 아닌
각 지점마다 다른 점에서 오는 가짓수를 배열하면 왠지 간단하게 답이 나올것같은 직감이 든다
0
2018.06.20
@4edg587
검색해보니 오일러 서킷?이라고 나오는데 공부좀 해봐야 겠다.
0
2018.06.20
고를 수 없는 공의 기준이 머징..?
0
2018.06.20
@머학띵소
랜덤이양
0
2018.06.20
@차고보
고를 수 없는 공의 기준이 랜덤이고, 고를 수 없는 공의 갯수도 랜덤임? 그러면 그냥 bruteforce밖에 없지않나?
0
2018.06.20
@머학띵소
내가 모르는 뭔가가 있을지도 모르자너...
0
2018.06.20
@차고보
죄다 랜덤이면 같은 1번을 클릭해도 계속 랜덤으로 뽑힌다면 이건 뭔가 답이 없는 문제가 될 수도 있는데.
정확하게 문제가 어떻게 나왔는지 궁금한데....
0
djd
2018.06.20
1,2 를 동시에 고를 수 있으면, 1-2간선 연결하는 식으로 그래프를 그리면,

정답 = 부분 그래프 중에서, 가장 큰 완전 그래프의 크기

이렇게 되는데,

부분 그래프 중에서 완전 그래프 = Clique 라고 부르고, 여기에 대한 이것저것들이 있음.

가장 큰 clique를 찾는 게 가장 큰 이슌데, 위키 주소 남김.

https://en.wikipedia.org/wiki/Clique_problem

근데 플로우, MCMF로 할려고 했는데 증명이 계속 삑나서 보니까 별다른 조건 없이, 최대 clique를 찾는 건 NP라는 것 같음.

----

반대로 1,2를 동시에 고를 수 '없을 때', 1-2를 연결하는 식으로 생각할 수 도 있는데(결국 똑같은 얘기니까 이것도 NP겠지만)

조건을 좀 더 넣어서 다항시간으로 가능하게 만든 버전은 ACM 한국 대회에 나온 적 있음.

조건은 1->3, 3->4 이 있을 경우, 1->4도 있는 것.

http://weeklyps.com/entry/BOJ-8898-%EC%8A%A4%ED%8F%AC%EC%B8%A0-%EC%A0%84%EB%AC%B8-%EC%B1%84%EB%84%90-GSK
1
2018.06.20
@djd
ㅠㅠ 예상은 했지만 np구나...

근데 아까 지워서 말은 안했는데 이분 뭐시기? 용어좀 다시 알려줄수 있어?? 궁금하자너
0
djd
2018.06.20
@차고보
알고리즘 중에, 네트워크 플로우라는 게 있는데,

이분 그래프에 대해서 네트워크 플로우 돌리는 걸 이분 매칭이라고 함.

저기 링크 걸어둔 acm 한국 대회 문제의 경우엔 이분 매칭으로 풀림.

네트워크 플로우에서 시간복잡도는 늘어나지만, 더 많은 문제를 풀 수 있는 방법 중에 MCMF도 있음.

NP가 아닌, 대부분의 그래프 문제는 MCMF로 다 풀린다는 속설이 있을 정도로 강력함.(시간복잡도를 다항시간인 것만 신경쓰면..ㅎㅎ)

저 문제 생각나서 이것도 이분매칭or MCMF로 될 줄 알았는데 증명 해놓고, 그 다음에 반례나와서 지움 ㅠㅠ
0
djd
2018.06.20
@차고보
http://www.labri.fr/perso/robson/mis/techrep.html

위키에서는 제일 빠른 게 이거라는 거 같은데,

대회나 코딩테스트에 문제 나오면, 결국 비트마스크DP 로 풀라고 하는 느낌으로 나올 거 같네...

아니면 저 문제처럼 조건을 더 넣어서 네트워크 플로우 문제로 바꾸던지...
0
2018.06.20
@djd
이런거 볼때마다 난 빡대가리인걸 다시한번 상기 시킨고 간다... ㅠ
0
djd
2018.06.20
@차고보
에이, 문제가 너무 어려운듯...

다항시간에 해결하는 건 아직 전문 연구자들도 못한 거고,

a->b,b->c 가 되면, a->c가 된다는 절라 강력한 조건이 있는 저 acm 문제도 당시에 한국에서 푼 팀이 5팀 이하였던 걸로 기억 하는데... 네트워크 플로우 응용이 원래 어려운 파트라서...

백트래킹 보단, 비트DP가 더 빠를 테니, 비트DP만 공부하면 뭐...
0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180465 [잡담] 채터링 어캐잡습니까... 1 로우팡맨 0 29 분 전 29
180464 [잡담] 4월에 마우스 큰 게 두 개 나오네 3 GNStout 0 38 분 전 51
180463 [컴퓨터] 무선 키보드 마우스 세트는 별로인가? 3 하이웨이 0 50 분 전 32
180462 [컴퓨터] 10만원대 포터블 모니터는 사는거 아니더라 6 코싸멘뚜 0 57 분 전 76
180461 [정보] 레이니75 저격하는 브릿지75 16 Veigrake 0 3 시간 전 171
180460 [모바일] 새 애플펜슬 나오면 기존 제품들 가격내려가? 4 II바II코II드II 0 5 시간 전 184
180459 [잡담] 드디어 왔다 레이니 5 ltearl 0 13 시간 전 250
180458 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 16 god79ii 0 13 시간 전 355
180457 [컴퓨터] sata 케이블때문에 ssd가 망가질 수도 있나요? 9 드웨인토마스 0 15 시간 전 274
180456 [컴퓨터] 구글에서만 검색창 방향키가 안먹음 뒷북 0 18 시간 전 83
180455 [모바일] 횽들 어거좀 봐줘 6 부자가될개붕이놈들 0 19 시간 전 166
180454 [컴퓨터] 선생님들 혜안을 구합니다 9 빠른인정빌런 0 20 시간 전 155
180453 [모바일] 당근으로 갤럭시탭 s9 울트라 사기로했는데 2 말이야방구야 1 20 시간 전 246
180452 [모바일] 갤럭시 동영상 자르기 안되는 이유 아시는분?? 3 일토준지 0 20 시간 전 132
180451 [프로그래밍] 코린이 ㅅㅂ 뭐가 문젠지 모르겠어요 6 집에가게해줘 0 21 시간 전 266
180450 [컴퓨터] 해피해킹 키보드 회사서 못 쓰는 이유 3 닉네임변경후13일차 0 22 시간 전 350
180449 [컴퓨터] 컴 바꿧듬 10 탑똥 1 22 시간 전 140
180448 [컴퓨터] CPU 불량이 맞는가!? 14 꺄꺄룽 0 22 시간 전 192
180447 [정보] 최근에 꽤 핫했던 레노버 y700 2세대 정보 모음입니다. 13 SeraMint 2 22 시간 전 242
180446 [잡담] 님들 컴터 조립할 때 ㅈ같았던 경험들 있음? 5 UBCS 0 23 시간 전 145