onsdag 19 mars 2008

Fundering

Jag sitter just nu och kodar en algoritm i c++. Har stött på ett intressant problem!

Låt x vara en icketom mängd reella, ändliga tal. Vi kan för enkelhetens skull bortse från möjligheten att några av dem är noll. Vi bortser också från specialfall där median(x)=0
Jag behöver funktionaliteten sign(median(x)) vilken är lite knepig att räkna ut utan att skriva lite kod (med std::nth_element(...) såklart...). Är det ekvivalent att vända uttrycket? (detta gör att det går att implementera enklare i mitt fall)
dvs, är
sign(median(x))=a ====>>>>> median(sign(x))=a
sant i allmänhet?





(mer fundering längre ner, låt bli att läs om du vill fundera ifred)






Det verkar som att så är fallet. Om sign(median(x))=1 betyder det att medianen av x är>0. Då är minst 50% av värdena i x positiva. Om minst 50% av värdena i x är positiva kommer minst 50% av värdena i sign(x) vara positiva. Då kommer median(sign(x)) att vara 1. Samma resonemang kan tillämpas med minst bytt mot högst för sign(median(x))=-1.
Andra riktningen då?
Om median(sign(x))=1 betyder det att minst 50% av sign(x)=1. Det betyder att minst 50% av x är >0. Då är median(x)>0 och sign(median(x))=1. Samma med minst bytt mot högst.

Kul, det är alltså ekvivalent bortsett från specialfall!

1 kommentar:

Anonym sa...

:) kunde inte sluta fundera innan jag kommit på hur det var!

anna