![]() |
Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
[Provocare] I.P.-uri unice intr-un fisier 120GB
Last Updated: Apr 08 2021 12:09, Started by
dani.user
, Apr 06 2021 20:13
·
0

#1
Posted 06 April 2021 - 20:13

https://forum.softpe...or-sau-runtime/
Vorbind de gestionarea memoriei, o provocare interesanta: https://codereview.s...very-large-file Nici prea grea nici foarte usoara.
Edited by MarianG, 06 April 2021 - 20:39.
|
#3
Posted 06 April 2021 - 20:24

Din partea mea, la liber. E si o discutie interesanta acolo pe baza faptului ca cel ce a postat solutia initiala a scris-o pentru un interviu.
|
#4
Posted 06 April 2021 - 20:46

Eu intreb o chestie, compresia nu este dependenta de numarul de IP-uri unice ?
|
#5
Posted 06 April 2021 - 21:01

Compresia text nu distinge unde incepe un IP si unde se termina.
Edited by dani.user, 06 April 2021 - 21:15. |
#6
Posted 06 April 2021 - 22:48

pai nu, dar inteleg ca sunt fiecare pe cate o line, iar parte din algorimul de compresie este "identificarea subsirurilor care se repeta", si locurile unde apar.
|
#7
Posted 06 April 2021 - 23:10

La ora asta nu stau sa-l fac mai bine, oricum, viteza e limitata de citirea de pe disc.
Evident ca in productie nici nu se pune problema sa parsezi asa ip-uri ![]() using System; using System.IO; namespace ConsoleApp1 { class Program { static void Main(string[] args) { var start = DateTime.UtcNow; var numUnique = 0u; var addresses = new ulong[uint.MaxValue / 64]; var fs = new FileStream(args[0], FileMode.Open, FileAccess.Read, FileShare.Read, 4096 << 16, FileOptions.SequentialScan); using (var sr = new StreamReader(fs)) { for (var line = sr.ReadLine(); line != null; line = sr.ReadLine()) { var ip = ParseIP(line); var index = ip / 64; var mask = 1ul << (int)(ip % 64); if ((addresses[index] & mask) == 0) { addresses[index] |= mask; numUnique++; } } } Console.WriteLine($"Using64Bits: {numUnique} {DateTime.UtcNow - start}"); } static uint ParseIP(string line) { var result = 0u; foreach (var c in line) { if (c == '.') { result *= 256; continue; } result = result * 10 + (uint)(c - '0'); } return result; } } } |
#8
Posted 06 April 2021 - 23:36

pentru cerința data eu nu m-as complica sa le parsez ci as face un hash(long) pe fiecare linie apoi cele unice stocate īntr-un SortedSet<T> sa fie look-upurile rapide(binary tree),cāteva linii maxim in total.
|
#9
Posted 06 April 2021 - 23:58

cu ce te ajuta sa faci un hash īn loc sa le parsezi? sau sa le pui īn sorted set fata de soluția de mai sus?
|
#10
Posted 07 April 2021 - 01:01

Eu le-as importa intr-o tabela temporara in memorie (dbs in-memory la alege cu import din fisiere text, cred ca toate au posibilitata) si as face SELECT DISTINCT sau COUNT ...whatever..
Sunt o gramada de patente si optimizari in sistemele de baze de date astfel incat putem folosi ce au gandit altii pana acum si suntem lenesi ca niste programatori adevarati ![]() Una dintre solutiile unde se poate face in 5 randuri : https://www.sap.com/...loud-trial.html Edited by radu103, 07 April 2021 - 01:05. |
|
#12
Posted 07 April 2021 - 01:22

practic tragi cu tunul sa omori o musca In varianta propusa de mine, rezultatul este corect, suficient de rapid si muncesc putin. Cred ca puncteaza onorabil la toate categoriile de jurizare ![]() Edited by radu103, 07 April 2021 - 01:23. |
#13
Posted 07 April 2021 - 01:24

eu le-as incarca intr-o tabela intr-o baza de date relationala si apoi as rula
create table ip_unice as select distinct ....... plus ca ptr incarcarea datelor din fisiere text sunt destul de multe utilitare optimizate ptr asa ceva si incarcarea poate fi facuta intr-un timp rezonabil. am facut chestia asta cu excel-uri primite de la diversi care fie aveau spatii la sfarsitul coloanelor, fie aveau cate un punct sau virgula la sfarsit (date text), fie aveam duplicate sau erau formatate ca naiba si scrise ba cu litere mici ba cu litere mari. odata ce le-am incarcat intr-o tabela am comenzi destule ptr procesarea datelor iar la sfarsit mi le exportam frumoase si curate ca un parlamentar proasppat iesit din inchisoare. stiu ca se poate face si din excel, dar dura mai mult sa caut comenzile excel decat sa le procesez intr-o baza de date relationala. aaa, daca e un test de angajare ca sa vada cat de bun esti ca programator asta e altceva, dar in viata de zi cu zi faci cum ti-e mai comod. Edited by rex, 07 April 2021 - 01:25. |
#14
Posted 07 April 2021 - 01:31

Compresia text nu distinge unde incepe un IP si unde se termina. Oricum acea compresie/decompresie va consuma mai mult procesor/curent/bani decat fara
eu le-as incarca intr-o tabela intr-o baza de date relationala si apoi as rula create table ip_unice as select distinct ....... am facut chestia asta cu excel-uri primite de la diversi care fie aveau spatii la sfarsitul coloanelor, fie aveau cate un punct sau virgula la sfarsit (date text), fie aveam duplicate sau erau formatate ca naiba si scrise ba cu litere mici ba cu litere mari. odata ce le-am incarcat intr-o tabela am comenzi destule ptr procesarea datelor iar la sfarsit mi le exportam frumoase si curate ca un parlamentar proasppat iesit din inchisoare. stiu ca se poate face si din excel, dar dura mai mult sa caut comenzile excel decat sa le procesez intr-o baza de date relationala. Dar ideea este buna. As incerca-o daca as avea mai multa incredere in solutii Microsoft
pentru cerința data eu nu m-as complica sa le parsez ci as face un hash(long) pe fiecare linie apoi cele unice stocate într-un SortedSet<T> sa fie look-upurile rapide(binary tree),câteva linii maxim in total. Edited by radu103, 07 April 2021 - 01:27. |
#15
Posted 07 April 2021 - 01:36

|
#16
Posted 07 April 2021 - 01:48

In momentul de fata exista un fisier comprimat (20GB). Mai ieftin decat storage-ul pe disk e doar aerul/apa gratis in domeniul nostru daca vorbim de 120GB ![]() Edited by radu103, 07 April 2021 - 01:50. |
#17
Posted 07 April 2021 - 09:10

Asta e problema de manual : cantitate necunoscuta de date de intrare , dar potential foarte mare, mai mare ca memoria disponibila
Este motivul pentru care s-au inventat generators/coroutines in Python Care in Java se cheama streams |
#18
Posted 07 April 2021 - 09:31

Nu mai stiu exact structura zip, dar ideal ar fi sa-l procesezi direct pe masura ce descarci arhiva.
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users