Få ut median/vikt ur vektor...

Permalänk

Få ut median/vikt ur vektor...

Tjo. Sitter och klurar på ett problem som jag inte riktigt lyckats få på något bra sätt.

Sitter med en vektor (eller rättare sagt en ArrayList ifrån java).

Vektorn är godtyckligt stor, dvs den kan innehålla n st element. Varje element är sedan ett heltal mellan 0 och en konstant MAX.

Ur denna skulle jag nu behöva få ut en procent som säger var vikten ligger så att säga. Det jag ska göra är att varje element i vektorn motsvarar en färg och jag ska leta reda på en slutfärg som blandar dessa färger. Mer av en färg kommer då förstås göra att den slutgiltliga färgen "går åt det hållet"...

För att förtydliga:

Ifall jag får
{0,0,0,3} Så ska värdet jag är ute efter vara 100%
{5,0,0,5} => 50%
{0,0,0,0} => 50%
{5,0,0,0} => 0%
{0,1500,0,0} => 33%
{1,5,3,5} => 74% ish, eller var den nu hamnar..

Och ja, färgskalan är inte i fler dimensioner så vissa blandningar kommer "bli fel" men det är inte så viktigt.

Någon som vet var jag ska börja leta efter algoritmer, kan inte tänka mig att detta är ett ovanligt problem men har svårt att veta vad jag ska googla på...

Visa signatur

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.

Permalänk
Medlem

Hej,

Jag kunde inte komma på vad man skulle söka efter så jag slängde ihop en algoritm(ej testad) som borde fungera

float viktadsumma=0,summa=0; for (int i=+;i<MAX;i++){ viktadsumma+=i*array.get(i); summa+=array.get(i); } float procentandel=viktadsumma/((MAX-1)*summa);

Permalänk
Medlem
Skrivet av xale89:

Hej,

Jag kunde inte komma på vad man skulle söka efter så jag slängde ihop en algoritm(ej testad) som borde fungera

float viktadsumma=0,summa=0; for (int i=+;i<MAX;i++){ viktadsumma+=i*array.get(i); summa+=array.get(i); } float procentandel=viktadsumma/((MAX-1)*summa);

Det du gjort som du säkert vet (åtminstone undermedvetet) är att räkna ut tyngdpunkten för en linje med vikterna array.get(i) jämnt utplacerade på en rät linje med avståndet 1. (I stort sett, tyngdpunkten hamnar på viktadsumma/summa, men sedan har du normerat med (MAX-1) för att linjens längd skulle bli 1, eller mellan 0 och 100%)
Se: http://en.wikipedia.org/wiki/Center_of_mass
Det som bör funderas över är specialfallet då vikterna alla är 0 så ska svaret bli mitten, annars så ser det hela väl trevligt ut?

Visa signatur

weeeee

Permalänk
Skrivet av xale89:

Hej,

Jag kunde inte komma på vad man skulle söka efter så jag slängde ihop en algoritm(ej testad) som borde fungera

float viktadsumma=0,summa=0; for (int i=+;i<MAX;i++){ viktadsumma+=i*array.get(i); summa+=array.get(i); } float procentandel=viktadsumma/((MAX-1)*summa);

Ahh, underbart. Den koden funkade typ rakt av.

Skrivet av mounte:

Det du gjort som du säkert vet (åtminstone undermedvetet) är att räkna ut tyngdpunkten för en linje med vikterna array.get(i) jämnt utplacerade på en rät linje med avståndet 1. (I stort sett, tyngdpunkten hamnar på viktadsumma/summa, men sedan har du normerat med (MAX-1) för att linjens längd skulle bli 1, eller mellan 0 och 100%)
Se: http://en.wikipedia.org/wiki/Center_of_mass
Det som bör funderas över är specialfallet då vikterna alla är 0 så ska svaret bli mitten, annars så ser det hela väl trevligt ut?

Yes, väldigt trevligt. Det gör mig inte så mycket att vikten blir fel med bara noller då jag ändå tänkte dölja färgen när den är nollad.

Thx all!

Visa signatur

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.