Összefuttatás (rendezettek uniója) – avagy a nagy koppanás története

Szóval, az úgy volt, hogy van még egy programozási tétel. Amit nem érdemes megtanulni. Legalábbis a mostani szintünkön, Pythonban dolgozva. Lássuk:

Egyébiránt itt a programkód, ha kísérleteznél vele:


import timeit

def összead_rendez(egyiklista, másiklista):
    return sorted(set(egyiklista + másiklista))

def összefuttat(egyiklista, másiklista):
    i, j = 0, 0
    eredménylista = []
    lenegyik = len(egyiklista)
    lenmásik = len(másiklista)
    while i < lenegyik and j < lenmásik:
        if egyiklista[i] < másiklista[j]:
            eredménylista.append(egyiklista[i])
            i += 1
        elif egyiklista[i] == másiklista[j]:
            eredménylista.append(egyiklista[i])
            i += 1
            j += 1
        else:
            eredménylista.append(másiklista[j])
            j += 1
    if i < lenegyik:
        eredménylista.extend(egyiklista[i:])
    if j < lenmásik:
        eredménylista.extend(másiklista[j:])
        return eredménylista

párosak = list(range(0, 10000000, 2))
páratlanok = [0]
páratlanok.extend(list(range(1, 20000000, 2)))
#a 0 azért szerepel a páratlanok elején, hogy meg kellejn birkózni azzal, amikor azonos elemek vannak
#az összefuttatandó listákban

print(timeit.timeit('összead_rendez(párosak, páratlanok)', number=5, globals=globals()))
print(timeit.timeit('összefuttat(párosak, páratlanok)', number=5, globals=globals()))

Legutóbb egyesítettünk, azaz unióztunk.

Advertisements

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s