Vyhledání největšího rozdílu

Programy pro práci s textem, tabulkami, prezentacemi

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod unitak 23. 9. 2016 08:46

Ahoj,
prosím o radu, jestli existuje nějaká funkce, která by mi vyhledala ve sloupci největší rozdíl.
Např. mám sloupec A, kde jsou hodnoty:
4,4
5,7
-10
3,6
3,6
11
4
-10
5
5
4,4
4,4
4
3,3
3
-10
4
-10
4
-10
-10
-10


Teď je jasné, že největší rozdíl hodnot ve sloupci je (-10+4-10+4-10-10-10)= -42

Dejme tomu, že mám ale sloupec, kde je 2000 hodnot. Existuje pro to nějaká funkce?

Děkuji za každou radu :)
Tomáš
unitak
Kolemjdoucí

Odeslat příspěvekod Nargon 23. 9. 2016 10:50

WTF? Co máš na myslí tím "největším rozdílem" z tvého popisu mi vůbec není jasné o co ti jde a ani jakou magii jsi vybíral čísla pro výsledek -42.

Tam jak píšeš "Teď je jasné, ..." je přesně to místo kde to jasné už není.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod X-Lorrien 23. 9. 2016 11:14

Jestli dobře koukám, tak největší rozdíl je 21 a ne 42.
Funkce je =ABS(MAX(A:A))+IF(MIN(A:A)<0;ABS(MIN(A:A));-ABS(MIN(A:A)))
X-Lorrien
Junior

Odeslat příspěvekod unitak 23. 9. 2016 12:17

Myslím tím "součet" různého počtu hodnot ve sloupci, kdy jejich součet bude číslo s nejvyšší zápornou hodnotou.

Tak jak jsem to psal...
4,4
5,7
-10
3,6
3,6
11
4
-10
5
5
4,4
4,4
4
3,3
3
-10
4
-10
4
-10
-10
-10


V této řadě čísel ve sloupci je součet čísel s nejzápornějším číslem mínus 42. (-10+4-10+4-10-10-10)= -42

Když to vezmu popořadě, tak první záporné číslo je třetí v řadě (-10), nad tím je 5,7 a pod je 3,6...Největší "záporné číslo" je (-10+3,6= -6,4), protože (-10+5,7=-4,3)...-6,4 je pro mě momentálně "nejzápornější číslo. Takto pokračuju dále a dále.. Až se dostanu k číslům na konci, kde je (-10+4-10+4-10-10-10)=-42.
V tomto sloupci je tedy součet v řadě "nejzápornějšího čísla" = -42.
Jde tedy o nejzápornější číslo součtu hodnot v celém sloupci, nikoliv mezi dvěma za sebou jdoucími čísly.

Nevím, jak jinak to vysvětlit bohužel.

Snad je to teď trochu pochopitelnější co mám na mysli.
unitak
Kolemjdoucí

Odeslat příspěvekod X-Lorrien 23. 9. 2016 13:06

Tohle není na algoritmus, alespoň ne podle zadání, protože z (5,7; -10; 3,6) jsi vybral -10+3,6 a z (3;-10;4) jsi vybral -10+4 namísto nižšího -10+3. Není v tom smysl.
X-Lorrien
Junior

Odeslat příspěvekod eici 23. 9. 2016 13:38

NO tak z tohto som skutočne jeleň a to som sa naozaj snažil.... Algoritmus rôzneho počtu čísel môžte takto vyrátavať rôzny počet kladných aj záporných hodnôt. chýba tomu nejaký logickejší argument.
eici
Junior

Odeslat příspěvekod satikcz 23. 9. 2016 13:48

Zadání je hrozně trochu zmatené, trochu neurčité a trochu zavádějící :) .
Z tvých příspěvků tipuji, že výrazem "největší rozdíl hodnot ve sloupci" myslíš "nejnižší součet po sobě jdoucích čísel"?

Jen to tipuju, protože jak už jsem psal, tvoje zadání mi přijde zmatené.
3x AOC AG271QG (2560x1440, IPS, 165Hz, GSync), MSI RTX 2080Ti Trio, Intel Core i7 8700K@5GHz+EKWB L360, ASUS Maximus X, 32GB G.SKILL TridentZ@3466 MHz, ADATA SX8200 2TB + 1TB + Crucial BX 500 GB + Kingston UV400 1TB, Seasonic P-860 Platinum, FD Define S
satikcz
Junior
Uživatelský avatar

Odeslat příspěvekod unitak 23. 9. 2016 19:18

satikcz: Ano tak to myslím...nejnižší součet po sobě jdoucích čísel.
Když vezmu kurzor, označím sloupec, tak mi to vypíše součet hodnot je: xy...a já hledám v tom sloupci celkový nejnižší součet. V mém vzorovém případě to je právě -42
unitak
Kolemjdoucí

Odeslat příspěvekod satikcz 23. 9. 2016 19:41

Jak to zapsat v Excelu netuším, ale zkus kouknout třeba tu:
http://www.excelforum.com/excel-formula ... rithm.html

Jestli teda dobře chápu co chceš, tak potřebuješ použít tzv. Kadanův algoritmus.
3x AOC AG271QG (2560x1440, IPS, 165Hz, GSync), MSI RTX 2080Ti Trio, Intel Core i7 8700K@5GHz+EKWB L360, ASUS Maximus X, 32GB G.SKILL TridentZ@3466 MHz, ADATA SX8200 2TB + 1TB + Crucial BX 500 GB + Kingston UV400 1TB, Seasonic P-860 Platinum, FD Define S
satikcz
Junior
Uživatelský avatar

Odeslat příspěvekod Drozi 23. 9. 2016 19:48

Takhle na první pohled mě napadá něco jako:
nadefinuj si proměnné:
-aktuální minimum
-globální minimum
-čítač kladných čísel

-dokud nenarazíš na záporné číslo, pamatuj si jako aktuální minimum
-až najdeš záporné číslo, zapamatuj si ho jako aktuální minimum a vynuluj si čítač kladných čísel
-každé další záporné číslo přičti k aktuálnímu minimu
-každé další kladné číslo si přičti k čítači kladných čísel
-pokud je hodnota čítače kladných čísel větší nebo rovná absolutní hodnotě aktuálního minima => pokud je součet aktuální minimum + čítač kladných čísel menší než globální minimum => nastav globální minimum podle aktuálního; jako aktuální minimum si nastav aktuální číslo a vynuluj čítač kladných čísel
-opakuj, dokud nedojdou čísla

Bude to chtít domyslet konkrétní podmínky, ale princip je v tom prodlužovat potenciální podposloupnout, dokud se to vyplatí (tj. v součtu dá aspoň -1 a dá se připojit k nějaké ještě lepší podposloupnosti) a pak začít novou.

Nebo by to šlo hezky dynamickým programováním...ale bylo by to taky hezky neefektivní :)
Drozi
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků