본문 바로가기

분류 전체보기

(25)
[궁극의 웰노운 알고리즘] 5. connected component dp, open and closed interval trick, X2 +1 trick, aliens trick, hirschberg algorithm 이번에 다룰 주제들은 dp이다. 물론 앞으로도 수많은 dp 포스팅을 써야겠지만...아무튼 이번에는 굉장히 웰노운적인 dp 트릭들을 다룰 예정이다. 사실 나도 그냥 이름이 신기해보여서 가져온거긴 한데 aliens trick 빼고는 뭔지 몰라서 공부해야 한다. 물론 이번에도 4번째 포스팅과 3번째 포스팅을 유기하고 왔지만, 뭘 기대하고 들어왔냐는 말은 싹아지가 없어보여서 그냥 안했다. 일단 3번째 포스팅은 거의 다 했고, 4번째 포스팅은 곰국에 막혀서 던졌다. 따라서 5번부터 시작한다. 1. aliens trick 뭐 여기에서 다루는 주제중에서는 가장 유명하고 웰노운인 것 같다. 일단 백준 태그가 정식으로 있는 시점에서부터... 아무튼, 기본적으로 trick의 이름이 붙은 문제에 대해 설명하는 것이 가장 정..
[궁극의 웰노운 알고리즘] 4. tree MO, 단절점 단절선 전반(k-간선 연결성, 온라인 단절점, 단절선, 블록 컷 트리) 뭘 기대하고 들어왔는가? 아직 3번 포스팅을 전부 쓰지도 않았다. 굉장히 나태했던것 같긴 한데...조만간 3번 포스팅을 전부 구현하고 작성하고 나면 시작할 것이다. ...라고 하기엔 3번 포스팅을 작성할 엄두가 나질 않는다. 대충 비츠랑 wavelet tree정도가 남았는데 wavelet tree는 이해는 했는데 안짜봤고, 비츠는 음...사실 대충 감은 잡고 있긴 한데 귀찮다. 병렬로 해도 별일 없겠지 억겁의 시간이 지난 9월 2일...비츠는 쓰긴 했고 wavelet tree는 써야 하긴 하는데...wavelet tree에 대한 motivation을 발견하지 못한 채 방황하고 있다. 그래서 그냥 이 글부터 다시 쓰기로 했다. 1. tree에서의 모스 알고리즘 솔직히 이걸 배우고 조금 감회가 새로웠다. 아..
[궁극의 웰노운 알고리즘] 3. 퍼시스턴트 레이지 세그, 2D 다이나믹 세그, 세그트리 머징, 세그비츠, wavelet tree (현재는 어느정도 내용이 작성된 상태이다. 아래는 글이 거의 안 써졌을 당시의 글이다) 뭘 기대하고 들어왔는가? 2번째 포스팅을 올린지 얼마 안 지났는데 그 모든 글을 쓸 수 있을리가 없다. 그러나 조만간 공부해서 전부 작성할 예정이다. 그냥 조금 써보자면, 퍼시스턴트 레이지 세그?라는 것에 대해 다룰 것이다. 아마 두개를 합친거겠지? 레이지는 내가 그냥 짤줄 알고 퍼시스턴트 세그는 이론상으로 짤 수 있지만 300줄정도 소요될 것이기 때문에 퍼시스턴트세그도 배워서 간결한 구현을 소개할 것이다. 그 다음으론 2D 다이나믹 세그...? 뭔가 이것도 비슷한 쿼리를 처리할 수 있어보이는데 직접 배워봐야 뭘하는건지 감을 잡을 것 같다. 머징은 머징 세그비츠는 최근에 재밌는 문제를 배웠는데 그걸 통해 직관을 얻은 ..
[궁극의 웰노운 알고리즘] 2. dial's algorithm, O(1) LCA, Pie for a Pie trick, incremental SCC 이전에는 다항식을 예고했었지만, 다항식에 대해 글을 작성하기에는 아직 정보가 부족하다고 판단되어 그냥 적당히 작성해볼만하고, 알아두면 좋을 것 같지만 그렇게 많이 알려져있다고 생각되지는 않는 그래프 이론의 아이디어들을 들고 왔다. 1. dial's algorithm 일반적인 무향 그래프의 한 점에서 다른 점들로의 최단경로를 검색하는 것은 다익스트라 알고리즘을 통해 수행할 수 있다는 사실이 잘 알려져있다. 그러나, 다익같은 경우에는 로그가 하나 붙기 때문에, 비정상적으로 정점이나 간선이 많은 경우에 대해서는 적용하기 힘들다. 하지만 만약 특수하게 각 간선들에 대한 가중치가 작다면, dial's algorithm을 사용하면 O(NK+M)만에 이를 수행할 수 있다는 것이 알려져있다. 이때, N은 정점개수, M..
[궁극의 웰노운 알고리즘] 1. FFT, NTT, online FFT, FWHT 음...최근 최대한 셋을 돌고 코포랑 앳코더를 돌아보고 있는데 자꾸 망치니까 정신상태가 안좋아지는 것 같아서 당분간은 셋을 도는 것에 주력하지 않고 웰노운 아닌 웰노운 알고리즘들을 배워보고자 한다. 뭔가 이론을 배우는 것 자체는 힐링되는 느낌이라 좋은 것 같다. 이제부터 배우는 족족 최대한 빠르게 "웰노운" 알고리즘들을 정리해서 올려볼 것이다. 만약 내가 블로그를 올리지 않는다면 독촉바란다. 아무튼, 이번에 다룰 대상은 일반적으로 두 다항식을 빠르게 곱하는 것으로 잘 알려져있는 FFT와 그 변형인 NTT, 온라인 FFT, FWHT에 대해 다룰 것이다. 1. FFT 해당 절에서는 이 문제를 해결하며, 이해하는 것을 목표로 두어도 괜찮을 것이다: 15576번: 큰 수 곱셈 (2) (acmicpc.net) 1..
JOI 2022 리뷰 다행히도 의지를 잃지 않고 두번째 셋을 쳤다. 첫 셋보다는 비교적 열정적으로 돈 것 같긴 하다. 뭐 근데 완전히 풀집중한건 아니고 그냥 적당한 고민속도로 문제를 푼거라서 다음에는 "더 열정적으로" 칠 필요성을 느꼈다. 아무튼, 셋 리뷰나 하겠다. 1. intercastellar (?) 어렵지 않다. 대충 2로 나뉠 수 있을만큼 나누고 투포인터로 처리하면 된다. 쿼리가 정렬되어있지 않았다면 구현량이 조금 늘어서 귀찮았을 것 같은데 다행히도 정렬되어있어 굉장히 짧게 코드를 짤 수 있다. 얻은 점수는 100점 2. self study 전형적인 유형의 파라메트릭 서치. 처음에 a>b인 모든 것들에서 a만을 써서 최대한 해보고, 이제 남은 것들을 b만을 써서 덮어낼 수 있는지 확인하는 문제를 로그번 풀면 해결된다..
COI 2017 리뷰 아주 오랫만에 블로그를 쓰는데 음...이유는 생략한다. 방학이 시작했고, 고1 여름방학 이래로 최초로 수올준비를 하지 않는 방학이 와서 ps와 수학공부에 온 초점을 맞출 생각이기 때문에, 이틀에 한번씩 셋을 돌고 업솔빙까지 완료하는 계획을 세웠다.(물론 이번 셋은 업솔빙을 전부 하진 못했다.) 아무튼, 이번에 돈 셋은 COI 2017(크로아티아 정올)이다. 생각보다 문제가 많이 매웠다. 또한 5시간짜리 셋이긴 하나, 깨어나자마자 비몽사몽한 상태에서 셋을 돌고 중간에 학원에 가야 했던 일, 생각보다 의지박약때문에 설렁설렁 친 것 때문에 그다지 부분점수도 안 긁고 성적이 딱히 좋지는 않다. 잡담은 이쯤까지 하고, 각 문제들에 대한 솔루션과 나의 접근에 대해 서술하겠다. 1. ili 일단 n,m 제한이 살벌해..
DLAS에 대해서 가끔, 어떤 문제를 정해의 방식대로 푸는 것보다 휴리스틱을 통해 푸는 것이 훨씬 직관적이고 간단한 경우가 있다. 그러한 문제들은 내가 적절히 포스팅을 해두었기 때문에 참조하면 좋을 것이다. 휴리스틱의 종류에는 여러가지가 있다고 할 수 있는데, 대표적으로 Simulated Annealing과 Diversified Late Acceptance Search가 있다. 전자는 대체로 SA라고 부르며, 일반적으로 휴리스틱중에선 널리 알려진 편에 속하는 것 같다. 그러나, 본 포스팅에서 소개할 기법인 DLAS는 일반적으로 SA보다도 더욱 강력한 효과를 발휘하는 것으로 알려져 있다. DLAS의 정확한 이론과 작동원리, 증명에 대해서는 지식이 부족해서 설명할 수 없지만, DLAS가 어떠한 방식으로 작동하는지는 설명이 가..