• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie Unique Paths

Object Storage Arubacloud
0 głosów
162 wizyt
pytanie zadane 21 stycznia 2023 w JavaScript przez Dani Obywatel (1,450 p.)

Cześć, mam pytanie dotyczące tego kodu. Jest to podejście do rozwiązania zadania typu https://leetcode.com/problems/unique-paths/description/ . To jest kod w javascript, ale chciałem napisać to w c++. Mamy tutaj klucz, który redukuje nam w niektórych przypadkach złożoność. Tylko tutaj mamy klucz m,n i takim sposobem redukujemy powtarzające się sekwencje m i n. Z tego co wiem to ten kod redukuje też sekwencje n i m( odwrotne do m i n). Jednak nie do końca rozumiem jakim sposobem i czy na prawdę redukuje te odwrotne sekwencje. Brakuje mi to do zrozumienia jak napisać to w c++.

1 odpowiedź

0 głosów
odpowiedź 22 stycznia 2023 przez Wiciorny Ekspert (269,590 p.)

To działanie rekurencyjne
spójrz np na ten przykład 

class Solution {
public:
    int nl, ml, dp[105][105];

    bool valid(int x, int y) {
        if(x < nl and y < ml) return true;
        else return false;
    }

    int solve(int i, int j) {
        if(!valid(i, j)) return 0;
        if(i >= nl-1 and j >= ml-1) return 1;
        if(dp[i][j] != -1) return dp[i][j];
        int ans = solve(i+1, j) + solve(i, j+1);
        return dp[i][j] = ans;
    }

    int uniquePaths(int m, int n) {
        nl = m, ml = n;
        memset(dp, -1, sizeof(dp));
        int ans = solve(0, 0);
        return ans;
    }
};

spójrz na linie memo[key] = której przypisywane są wyniki kolejno rekurencyjnych wywołan przeszukiwania  coś na bazie drzewa, lub grafi w którym postępujesz zmniejszając zarówno klucz m jak klucz n 

komentarz 22 stycznia 2023 przez Dani Obywatel (1,450 p.)
Czyli, gdy mam przypadek 3,1 to zapisuję w kluczu 3,1 bez 1,3 bo później prawdopodobnie na niego natrafię?
komentarz 22 stycznia 2023 przez Dani Obywatel (1,450 p.)
#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;
string key;

int uniquePaths(int m,int n, unordered_map<string, int> memoization) {
	key = to_string(m) + ',' + to_string(n);
	if (memoization.find(key) != memoization.end()) return memoization[key];
	if (m == 1 && n == 1)
		return 1;
	if (m == 0 || n == 0)
		return 0;
	memoization[key] = uniquePaths(m - 1, n, memoization) + uniquePaths(m, n - 1, memoization);
	return memoization[key];
}

int main()
{
	int m, n;
	cin >> m >> n;
	unordered_map<string, int> memoization;
	cout << uniquePaths(m, n,memoization) << '\n';
	return 0;
}

Starałem się napisać ten sam kod w c++, jednak nie działa on tak szybko.

Podobne pytania

0 głosów
1 odpowiedź 95 wizyt
pytanie zadane 22 stycznia 2023 w C i C++ przez Dani Obywatel (1,450 p.)
0 głosów
0 odpowiedzi 130 wizyt
pytanie zadane 21 stycznia 2023 w C i C++ przez Dani Obywatel (1,450 p.)
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 28 października 2022 w JavaScript przez chrystian Gaduła (4,780 p.)

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...