:: Èãðû Ðàçóìà
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
2 AlexM & PaulWist
Çàäàíèå áûëî äîïîëíèòü òîëüêî îäèí îïåðàòîð update. Áåç äîáàâëåíèÿ êàêèõ-ëèáî äðóãèõ îïåðàòîðîâ.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
È òàê íå ïðàâèëüíî?
CREATE CURSOR tmp (id i, f1 i, sum i)
FOR i=1 TO 10
INSERT INTO tmp VALUES (i, i, 0)
NEXT
UPDATE Tmp SET sum = (select SUM(a.f1) from (select id,f1 from Tmp) a WHERE a.ID<=Tmp.ID)
BROWSE


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.




Èñïðàâëåíî 1 ðàç(à). Ïîñëåäíåå : AleksM, 14.03.07 16:52
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
PaulWist

Ñîîáùåíèé: 14601
Äàòà ðåãèñòðàöèè: 01.04.2004
Ñàíü, ïðàâèëüíî.


------------------
Åñòü ìíîãîå íà ñâåòå, äðóã Ãîðàöèî...
×òî è íå ñíèëîñü íàøèì ìóäðåöàì.
(Â.Øåêñïèð Ãàìëåò)
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
AleksM
È òàê íå ïðàâèëüíî?
CREATE CURSOR tmp (id i, f1 i, sum i)
FOR i=1 TO 10
INSERT INTO tmp VALUES (i, i, 0)
NEXT
UPDATE Tmp SET sum = (select SUM(a.f1) from (select id,f1 from Tmp) a WHERE a.ID<=Tmp.ID)
BROWSE

 ïðèíöèïå, ïîõîæå, ïðàâèëüíî. À ñêîëüêî ñåêóíä âûäàñò íà 100000 (òàì çàäàíèå åùå è íà îïòèìèçàöèþ)?
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
Òîêà òâîé âàðèàíò ìíå áîëüøå íðàâèòñÿ.
È ðàáîòàåò áûñòðåå


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
Íà 100000 ïåðåïîëíåíèå áóäåò


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Ó ìåíÿ íà ìèëëèîíå â 10 ñåêóíä âëåçàëî áåç ïåðåïîëíåíèÿ
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
×åðåç ô-öèþ íà ëèìîíå 4,297ñåê.
Ïðîñòî ó òåáÿ ÷åðåç RAND() - ïîýòîìó è íåò ïåðåïîëíåíèÿ


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
Íà ëèìîíå ñ RAND() - 4,141ñåê
×åðåç âëîæåííûå çàïðîñû - íå äîæäàëñÿ.


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Òàê ìîæíî âìåñòî
INSERT INTO tmp VALUES (i, i, 0)
íàïèñàòü
INSERT INTO tmp VALUES (i, 1, 0)
òîãäà ïåðåïîëíåíèÿ íå áóäåò. Rand - ýòî ïðîñòî òàê, îò ëóêàâîãî.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
Âÿ÷åñëàâ Êëåïèíèí

Ñîîáùåíèé: 1597
Îòêóäà: Ñàíêò-Ïåòåðáóðã
Äàòà ðåãèñòðàöèè: 26.03.2004
À âîò òàê:
=RAND(-1)
CREATE CURSOR res (id i AUTOINC, vv i, vsum i)
FOR i = 1 TO 1000
INSERT INTO res (vv, vsum) VALUES (10 * RAND(), 0)
ENDFOR
nn = SECONDS()
UPDATE res SET vsum = vv + NVL((select SUM(aa.vv) from res as aa WHERE aa.id < res.id),0)
= MESSAGEBOX(STR(SECONDS() - nn, 10,2))
SELECT res
GO TOP
BROWSE

Íà P4 2500 c 1 ãèãîì ïðè 1000 çàïèñåé - 1,87 ñåêóíäû
Ïðè 100000 íå äîæäàëñÿ, ïðè ýòîì â äèñïåò÷åðå çàäà÷ ðàçìåð ïàìÿòè, çàòðåáîâàííûé ôîêñîì, äîñòèãàë 800 Ìá.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Èäåéíî ýòî ðåøåíèå î÷åíü ïîõîæå íà ðåøåíèå AleksM. Ïðîáëåìà â òîì, ÷òî çàòðà÷åííîå âðåìÿ ïðîïîðöèîíàëüíî êâàäðàòó êîëè÷åñòâà çàïèñåé. ×òîáû ïîëó÷èëàñü ïðèåìëåìàÿ ñêîðîñòü, íóæíî äîáèòüñÿ, ÷òîáû âðåìÿ îò êîëè÷åñòâà çàïèñåé çàâèñåëî ëèíåéíî.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
Prudivus

Ñîîáùåíèé: 4283
Îòêóäà: Êèøèíåâ
Äàòà ðåãèñòðàöèè: 14.12.2006
Âîò âàðèàíò, ñëåãêà, ïðàâäà, íàðóøåíû óñëîâèÿ: âìåñòî update èñïîëüçóåòñÿ replace. Íî çàòî ñêîðîñòü âïå÷àòëÿåò... ;) (0,185 ñåê., Duron 1000, VFP9)
RAND(-1)
CREATE CURSOR tmp (id i, f1 i, sum i)
FOR i=1 TO 100000
INSERT INTO tmp VALUES (i, INT(RAND()*10+1), 0)
NEXT
m.sc=SECONDS()
CREATE CURSOR tmp2 (s2 i)
APPEND BLANK
SELECT tmp
replace ALL tmp2.s2 WITH tmp2.s2+f1, sum WITH tmp2.s2
?SECONDS()-m.sc
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
Âëàäèìèð Ìàêñèìîâ

Ñîîáùåíèé: 14095
Îòêóäà: Ìîñêâà
Äàòà ðåãèñòðàöèè: 02.09.2000
leonid
Ìíå ïî÷åìó-òî êàçàëîñü, ÷òî ýòî íå äîëæíî âûçâàòü îñîáûõ çàòðóäíåíèé. Ïî êðàéíåé ìåðå ó òåõ, êòî ðåãóëÿðíî ñòðàõóåò àâòîìîáèëè. Äóìàþ, ìíîãèå èç íèõ çíàþò, ÷òî çàñòðàõîâàòü àâòîìîáèëü 29 ÿíâàðÿ íà äâà ìåñÿöà (ñ 29 ÿíâàðÿ ïî 28 ìàðòà) íå òàê âûãîäíî, êàê ñíà÷àëà íà 1 ìåñÿö ñ 29 ÿíâàðÿ ïî 28 ôåâðàëÿ, à ïîòîì åùå íà îäèí ñ 1 ìàðòà ïî 31 ìàðòà.
28 ÿíâàðÿ + 2 ìåñÿöà - 28.01.2007-27.03.2007
29 ÿíâàðÿ + 2 ìåñÿöà - 29.01.2007-28.03.2007

Ñïåöèàëüíî äëÿ ýòîãî äåëà íàäî çàâåñòè àâòîìîáèëü À òî òàê íèêîãäà è íå óçíàåøü, ÷òî ñòðàõîâùèêè ðàáîòàþò ïî ôîêñîâîé ôóíêöèè GoMonth()
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Prudivus
Âîò âàðèàíò, ñëåãêà, ïðàâäà, íàðóøåíû óñëîâèÿ: âìåñòî update èñïîëüçóåòñÿ replace.
ß ïðè ôîðìóëèðîâêå çàäà÷è ñïåöèàëüíî îòìåòèë, ÷òî ñòàíäàðòíûìè ôîêñîâñêèìè ìåòîäàìè ýòà çàäà÷à ðåøàåòñÿ ýëåìåíòàðíî.  ïðèíöèïå ýòà çàäà÷à íà îïòèìèçàöèþ ðàáîòû îïåðàòîðà Update.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Âëàäèìèð Ìàêñèìîâ
Ñïåöèàëüíî äëÿ ýòîãî äåëà íàäî çàâåñòè àâòîìîáèëü
Ìîæíî åùå êâàðòèðó ñòðàõîâàòü. Íî êâàðòèðó îáû÷íî ñòðàõóþò íà ãîä, è òîãäà ýòà ïðîáëåìà íå âîçíèêàåò.

Öèòàòà:
À òî òàê íèêîãäà è íå óçíàåøü, ÷òî ñòðàõîâùèêè ðàáîòàþò ïî ôîêñîâîé ôóíêöèè GoMonth()
À ìîæåò ýòî ôóíêöèþ GoMonth() ïèñàëè ïîä ñòðàõîâùèêîâ. Ñòðàõîâùèêè-òî ðàíüøå ôîêñà áûëè. Íî âîîáùå çäåñü îäíèì GoMonth() íå îáîéòèñü.
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
Prudivus

Ñîîáùåíèé: 4283
Îòêóäà: Êèøèíåâ
Äàòà ðåãèñòðàöèè: 14.12.2006
Öèòàòà:
 ïðèíöèïå ýòà çàäà÷à íà îïòèìèçàöèþ ðàáîòû îïåðàòîðà Update.
Íó âèäèøü ëè, â ôîêñå îïåðàòîð update ðåàëèçîâàí äîâîëüíî êðèâî, ïî êðàéíåé ìåðå òàê êàê â MS SQL íà ôîêñå ðåøèòü ýòó çàäà÷ó íåâîçìîæíî, íàâåðíÿêà ïðèäåòñÿ êàê-òî èçãàëÿòüñÿ, èñïîëüçóÿ òå ñàìûå "îñîáåííîñòè" ðåàëèçàöèè ôîêñîâîãî sql-update... Ïðè òîì ÷òî replace'îì ýòà çàäà÷à ðåøàåòñÿ, è î÷åíü ýôôåêòèâíî, íàâåðíÿêà áûñòðåå ÷åì update'îì.

 MSSQL äåëàåòñÿ òàê:

declare @s2 int
set @s2 = 0
update tmp set @s2 = @s2+f1, sum = @s2



Èñïðàâëåíî 1 ðàç(à). Ïîñëåäíåå : Prudivus, 15.03.07 11:07
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
leonid
Àâòîð

Ñîîáùåíèé: 3202
Îòêóäà: Ðèãà
Äàòà ðåãèñòðàöèè: 03.02.2006
Î÷åíü èíòåðåñíî. ß êñòàòè íå çíàë, êàê ýòî ïðàâèëüíî ýòî äåëàòü íà MS SQL, äàâíî íà íåì íå ðàáîòàë è ñ òàêèìè çàäà÷àìè íå ñòàëêèâàëñÿ. À ïðèâåäåííûé ïðèìåð íàòîëêíóë ìåíÿ íà èäåþ, êàê ìîæíî ðåøèòü çàäà÷ó åùå îäíèì ñïîñîáîì. Ïðàâäà â øåñòåðêå ýòî íå ðàáîòàåò (ó ìåíÿ íà ðàáîòå òîëüêî øåñòåðêà), âûäàåò ñòðàííóþ îøèáêó. Èíòåðåñíî, à êàê â äåâÿòêå?
RAND(-1)
CREATE CURSOR tmp (id i, f1 i, sum i)
FOR i=1 TO 100000
INSERT INTO tmp VALUES (i, INT(RAND()*10+1), 0)
NEXT
m.sc=SECONDS()
public m.aaa
m.aaa=0
UPDATE tmp SET sum=iif(_vfp.cmd("m.aaa=m.aaa+tmp.f1"),m.aaa,m.aaa)
?SECONDS()-m.sc
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
AleksM

Ñîîáùåíèé: 17881
Äàòà ðåãèñòðàöèè: 11.11.2003
Çà÷óäèòåëüíî. 1,7ñåê. Òîêà _VFP.DoCmd


------------------
Ëó÷øå ïåðååñòü, ÷åì íåäîñïàòü.
Íå ñïåøè, à òî óñïååøü.




Èñïðàâëåíî 1 ðàç(à). Ïîñëåäíåå : AleksM, 15.03.07 11:42
Ratings: 0 negative/0 positive
Re: Èãðû ðàçóìà 2
Prudivus

Ñîîáùåíèé: 4283
Îòêóäà: Êèøèíåâ
Äàòà ðåãèñòðàöèè: 14.12.2006
UPDATE tmp SET sum=iif(_vfp.cmd("m.aaa=m.aaa+tmp.f1"),m.aaa,m.aaa)
Ó ìåíÿ íà 9-êå âûäàåò îøèáêó: OLE unknown name...
Ratings: 0 negative/0 positive


Èçâèíèòå, òîëüêî çàðåãèñòðèðîâàííûå ïîëüçîâàòåëè ìîãóò îñòàâëÿòü ñîîáùåíèÿ â ýòîì ôîðóìå.

On-line: 6 (Ãîñòåé: 6)

© 2000-2024 Fox Club 
ßíäåêñ.Ìåòðèêà