• Członkowie 43 posty
    25 stycznia 2023 20:48

    Witam forum po długiej przerwie,

    pomyślałem, że można by pobawić się w zadanka algorytmiczne (tak jak to maiło miejsce na starym forum PPCG)...

    Wrzucam zadanie dla chętnych, za jakiś czas wrzucę swoje rozwiązanie i może komuś będzie chciało się dołączyć i porównamy nasze rozwiązania szczególnie pod kątem czasu wykonania.

    Zadanie 001:

    Wyszukiwanie wartości MAX i MIN przy limitowanej liczbie porównań

    Na wejściu otrzymujemy listę liczb numbers o rozmiarze n elementów (gdzie n jest większe niż 3). Należy znaleźć w liście numbers maksymalną i minimalną liczbę używając mniej niż 2 * (n - 1) porównań.

    Niebawem wrzucę tu swoje rozwiązanie.

  • edit

    Nazwa tematu została zmieniona z Python challange - zadanie 001.

  • Członkowie 2 posty
    25 października 2023 10:12

    Mój kod:

    numbers = [1,22,3,4,5,20,71,1,8,9,5,11,12,13]
    
    def min_max(numbers):
        min = numbers[0]
        max = numbers[0]
        n = 0
        for x in numbers:
            n += 1
            if max < x:
                max = x
        for x in numbers:
            n += 1
            if min > x:
                min = x
        print('min',min,'max', max)
        print('długość listy', len(numbers))
        print('liczba porównan: ', n)
    
    
    min_max(numbers)
    

    Wynik:

    min 1 max 71
    długość listy liczb 14
    liczba porównan: 28

    Nie wiem jak zmniejszyć liczbę porównań. :(

    test = [4, 2, 1, 5, 6, 3]
    
    def minmax(test):
        mini = min(test)
        maxi = max(test)
        return print('mini:', mini,'maxi:', maxi)
    
    minmax(test) # Kod samotestu
    
  • 13 listopada 2023 10:51

    W dwóch pętlach to nie wiem czy się da zmniejszyć liczbę porównań. W jednej powinno być łatwiej.

  • Członkowie 2 posty
    2 stycznia 2024 09:40

    Wzorując się na rozwiązaniu @pakarl
    Moje założenie jest takie, że jeżeli znaleźliśmy nowe maksimum, to nie może być ono nowym minimum i nie ma co tego sprawdzać w tym przypadku, w pozostałych i tak musimy sprawdzić.

    numbers = [1,22,3,4,5,20,71,1,8,9,5,11,12,13]
    
    def min_max(numbers):
        min = numbers[0]
        max = numbers[0]
        n = 0
        for x in numbers:
            n += 1
            if max <= x:
                max = x
            else:
                n += 1
                if min > x:
                    min = x
        print('min',min,'max', max)
        print('długość listy', len(numbers))
        print('liczba porównan: ', n)
    
    
    min_max(numbers)