azonos mintazatok

Kezdőlap Fórumok Programozás azonos mintazatok

10 bejegyzés megtekintése - 1-10 / 13
  • Szerző
    Bejegyzés
  • #1889951
    ktibi
    Felhasználó

      Hello,vannak kulonbozo szamu sorokbol allo fajljaim ket oszloppal, pl.FILE 1

      Code:
      1 00014 00108 01119 1011

      FILE2

      Code:
      5 01018 1111

      FILE3

      Code:
      8 0110

      A kerdesem az lenne, hogy hogyan tudnam kiszurni a fajlokbol csak azokat a sorokat melyek sorszama (pontosabban az elso oszlopanak erteke) megegyezik, azaz ezt kapni eredmenyul:

      Code:
      8 0111 1111 0110

      ?

      #2202485
      pointux
      Felhasználó

        Ha a file-ok nem túlságosan nagyok, akkor én egyszerre beolvasnám az összeset. (Így a leggyorsabb, legegyszerűbb.)Itt van pl. egy bash script rá, mely más elemzésre is alkalmas lehet.

        Code:
        #!bin/bash# Beolvasás a file-okból (ha pl. az elválasztó karakter space, enter, amit az IFS megenged)datas_1=( $(cat 1.dat) )datas_2=( $(cat 2.dat) )datas_3=( $(cat 3.dat) )# Hány adat vannum_of_datas_1=${#datas_1[@]}num_of_datas_2=${#datas_2[@]}num_of_datas_3=${#datas_3[@]}# Ciklus futtatása (ez igazából bonyolultabb műveletekre is megfelel)i_1=0while [ $i_1 -lt $num_of_datas_1 ]; do

        #2202486
        ktibi
        Felhasználó

          Koszi szepen a valaszt! 😉Teszteltem a dolgot es kicsit bajban vagyok a futasidovel.... Ha 6 db. 10 soros file-om van, amelyben ketto egyezet talalunk, akkor a script kb. 1 perc alatt fut le, amit furcsa, es rohadt lassu... :'( Mi lehet a baj? Hogyan lehetne javitani a progin?

          #2202487
          pointux
          Felhasználó

            Hogy jön össze a 6? Ez pillanatnyilag 3 file-t hasonlít össze egyszerre és emelkedő sorszám esetén arról is gondoskodik, hogy ne legyen felesleges vizsgálat. (Persze, ha megfelelően átírtad a kódot, az más kérdés. Csak azt sem árt ellenőrizni… ennek most pill. jól kellene működnie.)Nálam 3 db 10 soros file elemzése, melyben 2 egyező adat van és az egyik egyező az utolsó sorban (minden file-ban), azaz a legrosszabb esetben 1 mp a futási idő.Ha gond van a sebességgel át kell írni pythonra, vagy inkább c-re. (Hát átírhatjuk c-re, csak akkor majd le kell fordítanod. Persze miután megtudom, hogy hogy jön össze a 6.)

            #2202488
            ktibi
            Felhasználó

              A 6 db. csak szimplan a 3 kiterjesztese, azaz most 6 db. file-om van.Pl.

              Code:
              2 0001000000000000

              ilyen sorokbol all, ebbol viszont az emlitett ezres nagysagrendben file-onkent.Feltettem ide a file-okat es a scriptet is: http://addat.hu/52932a33/linuxforum.tar.gz.htmlHa futtatom, akkor latod majd, hogy sokaig fut... :-

              #2202489
              pointux
              Felhasználó

                Ide is fel tudod tölteni és akkor nem kell szórakozni a letöltögetéshez. De azért mindjárt megnézem.

                #2202490
                pointux
                Felhasználó

                  Már rögtön mondom, hogy ne várj csodát, hisz 1-2 ezer adatod van minden file-ban, ami azt jelenti, hogy rossz esetben2000^6 = 6,4*10^19 összehasonlítást kell elvégezni, ami nem kevés. (Ugyanis az összehasonlítandó file-ok növelésével exponenciálisan nő, az adatokéval, persze csak lineárisan a ciklusok száma.)C-re átírva biztosan tudsz rajta gyorsítani, de a 6*10^19, az 6*10^19. 😉

                  #2202491
                  ktibi
                  Felhasználó

                    Lehetne valahogy javitani ezen, mert mindenkeppen ki kellene szurni ezeket a sorokat. Valahogy biztos lehet rovid ido alatt is „egyszeruen”… Van tipped?

                    #2202492
                    pointux
                    Felhasználó

                      Még optimalizálhatjuk úgy, hogy amennyiben az első kettő nem egyezik, akkor ne futtassa le a ciklust. Ez nem egyezés esetén (ami valószínűbb) gyorsít, ha pedig egyezés van, akkor lassít, mivel van plusz vizsgálat.Azon kívül eltehetjük a memóriába a talált első értékeket indexeit egy-egy file-nál így a következő vizsgálatot már csak ettől kell elvégezni.De az az igazság, hogy én csak 3 file-ra gondoltam, aminél pl. 2000 sor csak 8 milliárd összehasonlítást jelentene, ami jóval kevesebb, mint így.

                      #2202493
                      ktibi
                      Felhasználó

                        Igen, nem konkretizaltam, hogy vegul >3 darab file esetere kellene; azert koszi szepen!Jo lenne valamit viszont kitalalni a >3 esetre, ami viszonylag "gyors"; gondolkozom...Szerk.: valoszinuleg az a leggyorsabb, ha szetdaraboljuk, azaz mindig csak 3 vagy ketto file-t vizsgalunk es utana az eredmenyt hasonlitjuk ossze egy masikkal es igy tovabb...

                      10 bejegyzés megtekintése - 1-10 / 13
                      • Be kell jelentkezni a hozzászóláshoz.