2011. 10. 19. 05:31

"빛보다 빠른 뉴트리노" 실험이 잘못된 게 밝혀졌다구요?

갑자기 인터넷에 온통 OPERA의 뉴트리노 실험이 잘못되었다는 결론이 나왔다는 소식들이 넘쳐난다.
내용을 보면 네델란드  University of Groningen 대학의 Ronald Van Elburg가 arvix에 올린 

Time-of-flight between a Source and a Detector observed from a Satellite 

라는 논문이 위 실험의 에러를 찾아냈다는 것이다. 

이미 빛보다 빠른 뉴트리노를 설명하는 수 십편의 논문과 문제점을 지적하는 수십편의 논문이 나왔다는데 ( 확인은 안해봤으나 믿을 만한 사람들이 한얘기, 굳이 안 찾아봄 ), 얼마나 잘 쓴 논문이길래 시끄러운가 하고,,
이미 이론과 많이 멀어진 실험물리학자이지만 몸소 한번 들여다 보기로 했다.

그런데!!!

오!!!!!!!, 이건!!!!!!!


쉽다.... 

 
수식도 몇개 안되고 특수 상대성이론 반나절 공부하면 따라갈 수 있는 전개!!
왜 인터넷이 떠들석해 졌는지 이해가 간다. 다른 논문들은,, 이해할 수 없으니.... 

이렇게 쉬운 수식으로 뭘 찾아낸걸까,, 천잰데..

하지만, 내용이 선뜻 동의하기 어렵다.
주된 내용은 인공위성에서 출발한 전파가 GPS수신기에 도달하는 시간에 대해서 얘기하고 있는것 같은데.
일단,  GPS 시간 측정이라는건, 여러 개의 위성을 이용해 계산 하는 것이기 때문에 
( 내시계와  GPS 시계가 동기화 되어 있는게 아니라면, 하나의 위성으로는 시간과 위치를 알 수  없고, 4개 부터 가능하다 )  두개의 GPS수신기에 대해서 2*Error = 64ns 라는건,  좀 억지스러워 보인다 ( 이건 논문에 따르면 한개의 gps위성이 첫번째 수신기와 두번째 수신기 사이에서 있을때 얘기.. 라고 추측됨, 확실한건 아무것도 없음 :-) )

무엇보다

 

, 라는 건, 선뜻,, 이상하다 ( 라는건 뭔소린지 모르겠다 )  ( s는 인공위성 rest frame이란 뜻이고,  S는 거리 
τ는 도달 시간 ). 
 

특히

결론인 t = S/(c+v) 쯤 오면 .. 이건 이동하는 물체에서 발사된 빛은 속도가 c보다 빠르다는 건가?  도플러 효과얘기라면 몰라도....

흠 솔직히 모르겠다, 실험한답시고 공부를 안했더니 다 잊어먹었다.
CERN에 있으면서 특수상대성 이론도 헷갈린다니 쪽팔린다. 공부해야지. 


추가.
물론 OPERA 실험 결과가 틀렸다는데 100$건다. 이건 그냥 배팅.
하지만 틀렸더라도 문제가 무엇인지를 찾기가 쉽지가 않다는 건 확실하다. 
실험 물리학자들이 놀고 먹으면서 결과 내는게 아니거든.

 
2009. 3. 25. 09:00

두 문자열에서 중복되는 부분 찾기

sng2nara님의 낚시에 파닥파닥 낚여서 만들어보게 되었다.

문제는 다음과 같은 문자열들이 있을때

my $common = 'ABC';
my @str;
$str[0] = 'AA BBCD ABC bbbc aaaa';
$str[1] = 'BBAA BBCD ABC bbb';
$str[2] = '123BBAA BBCD ABC bbFSKFSJLK';
$str[3] = '239I2P3IBBAA BBCD ABC bbb FLSKJFLSKJDFLJS';
$str[4] = 'ABC bbb';


@str의 문자열들에서 ABC를 포함하면서 공통되는 가장 큰 문자열 셋을 찾는 것.
이경우네는 ABC bbb 가 된다.

물론 효율을 따지면,, 한글자한글자 비교해야 겠지만
일단 효율 무시, 정규표현식을 써보자

두 문자열의 공통된 부분을 찾는 건 꽤 쉽다. 일단 두 문자열을 합친 다음에 다음처럼 만들면 된다.

($max_common) = (($str[0].$str[1]) =~ /^.*?(.*$common.*).*?\1.*?$/)


자세한 설명은.. 생략
한가지만 얘기하자면 첫번째 ()에서 찾은것이 \1이 된다는 정도.
사실 경우에 따라 몇가지 버그를 가지고 있기는 하다
한 문자열에 ABC가 여러개 있다면 우리가 원하는 대로 나오지 않을 수 있다.
이경우에는 한 문자열에 ABC가 하나만 있다고 가정하자. (혹은 그렇게 만들 루틴을 가지고 있다고)

그럼 여러개의 문자열에 대해서는 어떻게 할까?
여러개의 문자열을 모두 합쳐서 찾으면 좋겠지만, 그럼 위와 같은 문제가 다시 발생한다.
어쩔수 없이 정규표현식을 문자열 개수만큼 돌려야 한다.

my $max_common = shift @str;
($max_common) = (($max_common.$_) =~ /^.*?(.*$common.*).*?\1.*?$/) for @str;
print $max_common;

우왕 굿.

그러나 효율에는 심각한 문제가 있다.
이 정규표현식의 경우는 backtracking을 이용해서 꽤 과도하게 검색을 하기 때문에 긴 문자열에는 적합하지 않다.

테스트로 17kbytes 문서 두개를 이용해서 비교해 봤는데 10분 동안 돌린후에 테스트를 포기했다.
문자열의 길이에 대해 어느정도 효율을 가지는지 테스트해보고 싶지만,, 귀차니즘으로 생량.

그것은 그대의 손에!!















'Perl Recipe' 카테고리의 다른 글

일전한 글자수의 단어 세기  (7) 2009.03.24
원라인 펄 놀이 - 첫줄 빼고 sort  (0) 2008.04.17
여러파일을 sorting 하기  (0) 2007.12.11
리스트 비교  (0) 2007.11.06
한꺼번에 많은 파일 지우는 세가지 방법  (1) 2007.11.05
2009. 3. 24. 18:41

일전한 글자수의 단어 세기

http://kldp.org/node/104031 를 보고 aero님과 얘기하다가 시작되었다.

문제의 내용(사실은 문제의 일부)는 다음과 같은 문자열에서 AA, AT, AG, AC....의 개수를 세는것

ATCGATCGATCGATAAAC
GATCTAGCTAGCATAACC

앞에서 부터 두글자씩 세는건 아주 단순하다.

$count{$_}++ while $str =~ /(..)/g


하지만 aero님의 문제제기,

앞에서 부터 2글자씩 세는 것이 아니라 임의의 두글자라면 어떻하죠?

먼저 aero님의 구현은
 while ( $str =~ /(..)/g ) {
    $count{$1}++;
    pos $str -= 1;
}
오 멋지다.  마지막으로 두글자의 다음 위치인 pos($str) 의 위치를 뒤로 한글자 돌려서 다시 검색한다.
2글자가 아니라 N글자라면 pos $str -= N-1 이라고 해주고 정규표현식을 조금 바꿔주면 끝.

나의 구현도 매우 비슷하다. 다만 perl 정규표현식의 \G앵커를 사용했다는 정도

pos($str) = 1;
while ( $str =~ /(.\G.)g ) {
    $count{$1}++;
}


처음 pos를 정해놓고 현재 pos위치를 의미하는 \G앵커를 이용하여 검색.. (자세한 내용은 perldoc perlre)
N글자의 단어를 찾으려면 pos위치를 N-1로 하고 /(.{$N-1}\G.)/g 로 바꾸면 끝..
N글자에서는 aero님의 코드가,, 몇글자 짧아지긴 하겠군요

글자수도 거의 같고, 효율도 거의 비슷하겠군.

원라이너 용으로 내 코드를 정리해 보면

perl -nle'pos=1;$c{$1}++ while /(.\G.)/g}{print"$_\t$c{$_}"for sort keys %c' filename


되겠다.

추가로 Luz♡lunA 님의 말씀

 <Luz♡lunA> [hanIRC] c식으로 하면 그냥 한글자씩 뽑으면서 prev를 저장해가면서 진행하면.....

맞습니다.
이게 정석인거죠.