Opis zadania
Zadanie składa się z dwóch osobnych części. W obu przypadkach nie wolno skorzystać z informacji o całkowitej liczności zbioru danych, którym w tym przypadku będą
pliki tekstowe (200000 pustych plików).
- Zadanie 1 Do każdego pliku tekstowego należącego do wskazanego zbioru należy wstawić literę "X".
- Zadanie 2 Pliki należy ponumerować:
- Przed nazwą dodać odpowiednią liczbę zajmującą zawsze ustaloną liczbę znaków.
- Jeśli liczba jest krótsza niż ustalona liczba znaków, to należy dopełnić ją od lewej strony znakiem zero.
- Dodaną liczbę oddzielić od nazwy znakiem podkreślenia.
- Kolejność przypisania liczb do plików jest dowolna.
- W przypadku plików należących do zestawu testowego dla tego zadania, liczby zapisujemy na 7 znakach.
Przykład:
Niech dane będą pliki
data_a.dat
data_b.dat
data_c.dat
Jeśli liczby miały by być zapisywane na 3 znakach, wówczas nazwy powinny zostać zmienione na:
001_data_b.dat
002_data_a.dat
003_data_c.dat
- Oba zadania należy zrobić z wykorzystaniem wątków/zadań.
- Każde zadanie robimy osobno - nie łączyć obu rozwiązań w jednym skrypcie itd.
- W obu przypadkach należy przeprowadzić testy pokazujące zależność czasu niezbędnego na wykonanie zadania od ilości użytych wątków.
- Jako rozwiązanie przesyłają mi Państwo archiwum zip. Kod źródłowy w katalogu src. W katalogu doc powinien znaleźć się raport z przeprowadzonych testów oraz wszelkie materiały dodatkowe, jak choćby instrukcja uruchomienia skryptu, który dokonał ekstrakcji Państwa plików.
- Katalog główny (i archiwum zip) nazywamy według formatu multiprocessing_nazwisko_imie.
W związku z pewnymi wątpliwościami, przesyłam dodatkowe wyjaśnienia związane z zadaniem.
Zwracam uwagę, iż na samym początku opisu jest zdanie: "W obu przypadkach nie wolno skorzystać z informacji o całkowitej liczności zbioru danych". Tworząc tablicę w której mają Państwo wszystkie nazwy plików i przekazując ją w całości do procesu, łamią Państwo ten warunek. Mając je wszystkie w tablicy, jawnie albo nie, używają Państwo informacji o ich łącznej ilości. Aby wytłumaczyć o co chodzi w zadaniu, proszę przemyśleć takie dwa przykłady.
Przykład 1 (pierwsza część zadania).
Mamy stos kartek. Nie wiemy ile ich jest. Mogę całkowicie losowo podzielić ten stos pomiędzy np. 4 osoby i każdą z nich poprosić o postawienie znaczka "X" na kartce. To daje się zrobić. Zadania te są niezależne, każdy może stawiać znaczek "X" w swoim tempie i zupełnie nie ma znaczenia ile kartek każda z osób dostanie. Tutaj rozmiar stosu niewiele nam daje.
i teraz
Przykład 2 (druga część zadania).
Podobnie jak poprzednio, mamy stos kartek i nie wiemy ile ich jest. Tym razem trzeba je jednak ponumerować od 1 do N, gdzie N jest łącznym rozmiarem stosu. Teraz nie mogę zwyczajnie rozdzielić kartek pomiędzy osoby, gdyż nikt nie będzie wiedział od jakiej wartości ma numerować. Nie mogą też numerować rozpoczynając od 1, 2, 3 i 4 z krokiem co 4, a więc
1 numeruje: 1, 5, 9, 13, ...
2 numeruje: 2, 6, 10, 14, ...
3 numeruje: 3, 7, 11, 15, ...
4 numeruje: 4, 8, 12, 16, ...
Tak by mogło być, gdyby dostali po tyle samo kartek, ale tego nie wiemy.
Podobnie w zadaniu jakie wymyśliłem, żaden z wykonawców nie może mieć informacji całościowej o wszystkich danych.
Jest to odzwierciedlenie rzeczywistej sytuacji, kiedy to ze względu na rozmiar danych, nie możemy mieć całościowej informacji o nich, gdyż nie mieszczą się w pamięci.
W razie pytań zapraszam do kontaktu.
Materiały