Program Java folosind matrice 4D [închis] (Programare, Java, Array-Uri, Matrice Multidimensională, Atribuirea Variabilelor)

Prathamesh a intrebat.

Sunt un student în primul an de inginerie informatică și sunt destul de nou aici. Am învățat Java în ultimele trei luni și jumătate, iar înainte de asta am învățat C++ timp de șase luni. Cunoștințele mele despre Java se limitează la definirea și utilizarea metodelor proprii, la elementele de bază absolute ale programării orientate pe obiecte, cum ar fi utilizarea membrilor de date statice și vizibilitatea membrilor.

În această după-amiază, profesorul meu de programare ne-a învățat despre array-urile multidimensionale în Java. Despre array-urile multidimensionale care sunt pur și simplu array-uri de array-uri și așa mai departe. El a menționat că în programarea nominală, educațională, array-urile de peste 2 dimensiuni nu sunt aproape niciodată folosite. Chiar și array-urile 3D sunt folosite doar atunci când sunt absolut esențiale, cum ar fi realizarea de funcții științifice. Astfel, matricele 4D nu sunt aproape deloc utile, deoarece utilizarea lor arată că „folosești tipul de date greșit”, după cum spunea profesorul meu.

Cu toate acestea, aș dori să scriu un program în care să se justifice utilizarea unui array 4D, de orice tip de date, primitiv sau nu. Programul nu trebuie să fie la fel de banal ca și imprimarea elementelor din array.

Habar nu am de unde să încep, de aceea postez aici. Aș dori sugestiile voastre. Enunțuri relevante ale problemei, algoritmi și bucăți de cod sunt, de asemenea, binevenite.

Vă mulțumesc.

Edit: Am uitat să menționez, nu am absolut nicio idee despre lucrul cu interfețe grafice în Java, așa că vă rog să nu postați idei care implementează interfețe grafice.

Comentarii

  • Există vreo problemă exactă cu care vă confruntați? –  > Por dan1st.
  • Deși acest lucru poate fi interesant la nivel educațional, profesorul tău are dreptate. Array-urile ridică atât de multe întrebări sub formă de inițializare, limite și așa mai departe, încât abia dacă ne niciodată folosim array-uri de orice dimensiune în Java. De obicei, este o idee mult mai bună să încapsulăm starea într-un obiect care să se ocupe de toate detaliile tehnice. –  > Por Jonathan.
8 răspunsuri
Victor Sorokin

Idei:

– Înmulțirea matricelor și aplicațiile sale, cum ar fi găsirea celei mai scurte căi în grafuri – Rezolvarea sistemelor de ecuații – Criptografie – multe criptoprotocoale reprezintă datele sau cheile sau structurile lor interne sub formă de matrici. – Orice algo pe grafuri reprezentate sub formă de matrici.

Cred că am făcut o fixație pe matrici, scuze 🙂

Pentru matricele 4D, un lucru evident la care mă pot gândi este reprezentarea unui mediu 3D care se schimbă în timp, astfel încât a patra dimensiune să reprezinte scara timpului. Sau orice reprezentare a 3D care are proprietăți suplimentare asociate plasate în a 4-a dimensiune a matricei.

RoflcoptrException

Ați putea crea un hipercub Sodoku cu 4 dimensiuni și să stocați numerele introduse de utilizator într-un array int cu 4 dimensiuni.

Comentarii

  • Nici măcar nu știu ce este un hipercub Sodoku, dar sună minunat! 🙂 –  > Por david99world.
  • Se presupune că este vorba de un sudoku jucat în 4 direcții în loc de 2 obișnuite. Vezi articolul de pe wikipedia pentru Sudoku comun care este 2D. –  > Por Victor Sorokin.
Ishtar

O utilizare ar putea fi aplicarea programarea dinamică la o funcție care ia 4 parametri întregi f(int x,int y,int z,int w). Pentru a evita apelarea acestei funcții costisitoare la nesfârșit, puteți stoca rezultatele într-o matrice 4D, results[x][y][z][w]=f(x,y,z,w);.

Acum trebuie doar să găsiți o funcție întreagă costisitoare cu aritmetica 4, oh, și o nevoie de a o calcula des…

Comentarii

  • Da, așa este. Tocmai am rezolvat o problemă cu programare dinamică și am folosit un array 4D. Trei dintre dimensiuni aveau intervale fixe, iar cealaltă dimensiune depindea de n. –  > Por John Kurlak.
EightyOne Unite

Doar pentru a-l susține,…profesorul tău are dreptate. Mi-e teamă că aș putea fi violent fizic cu oricine folosește o matrice 4D+ în codul de producție.

Este kinda mișto să poți intra în mai mult de 3 dimensiuni ca un exercițiu educațional, dar pentru munca reală face lucrurile mult prea complicate pentru că nu prea înțelegem structurile cu mai mult de 3 dimensiuni.

Motivul pentru care este dificil să găsești o utilizare practică pentru matricele 4D+ este că în lumea reală nu există (aproape) nimic atât de complicat de modelat.

Ați putea încerca să modelați ceva de genul tesseract care este (în termeni simpli) un cub 4D sau, așa cum sugerează Victor, să folosiți a 4-a dimensiune pentru a modela timpul constant.

HTH

Elliander

Există multe utilizări posibile. Așa cum au spus și alții, puteți modela un hipercub sau ceva care să utilizeze un hipercub, precum și să modelați o schimbare în timp. Cu toate acestea, există multe alte utilizări posibile.

De exemplu, unul dintre modelele teoretice de simulare a universului nostru utilizează fizica celei de-a 11-a dimensiuni. Puteți scrie un program care să modeleze cum ar arăta această fizică presupusă. Utilizatorul ar putea vedea doar un spațiu tridimensional, ceea ce limitează în mod cert utilizabilitatea, dar coordonatele celei de-a 4-a dimensiuni ar putea acționa ca schimbarea unui canal, permițând utilizatorului să își schimbe perspectiva. Dacă, de exemplu, are loc o explozie în a 4-a dimensiune, s-ar putea chiar să doriți o matrice în a 5-a dimensiune, astfel încât să puteți modela cum arată în fiecare spațiu tridimensional conectat, precum și cum arată în fiecare cadru de timp.

Pentru a face un pas în afara domeniului științific, gândiți-vă la un MMORPG. În prezent, multe dintre aceste jocuri folosesc locații „instanțiate”, ceea ce înseamnă că o copie a unei anumite zone este creată exclusiv pentru a fi folosită de un anumit grup de jucători, pentru a preveni întârzierile. Dacă acest concept de „instanțare” ar primi o coordonată în a patra dimensiune și ar permite jucătorilor să își schimbe poziția între instanțe, ar putea permite efectiv ca toate lumile serverului să fie unite, permițând în același timp jucătorilor să aibă un control foarte mare asupra locului în care merg, reducând în același timp costurile.

Desigur, întrebarea dumneavoastră dorește să afle despre idei fără a folosi o interfață grafică. Acest lucru este un pic mai dificil, deoarece lucrați într-un mediu 2D. O aplicație reală ar fi Calculul. Avem calculatoare grafice 3D, dar pentru dimensiunile mai mari trebuie să o faci destul de mult de mână. O pogramă care își propune să rezolve aceste calcule în locul tău s-ar putea să nu fie capabilă să afișeze corect informațiile, dar cu siguranță le poți calcula. De asemenea, atunci când interfețele holografice vor deveni o realitate larg răspândită, ar putea fi posibilă reprezentarea unui grafic hipercubic în 3D, ceea ce ar face ca un astfel de program să fie util.

S-ar putea să puteți scrie un joc de societate bazat pe text, în care poziția pieselor să fie reprezentată prin text. Puteți adăuga dimensiuni și reguli de joc pentru a le utiliza.

Cea mai simplă idee pe care v-aș putea-o da este un sistem de salvare a stării. La fiecare interval de timp, programul din memorie este copiat și stocat într-un fișier. Coordonata lui este poziția lui în timp. La prima vedere, s-ar putea să nu aveți nevoie de o matrice 4D pentru a gestiona acest lucru, dar să presupunem că programul ale cărui stări le salvați folosește o matrice 3D. Ați putea să îl configurați astfel încât să reprezinte fiecare stare salvată ca o poziție în timp pe care să o puteți utiliza și apoi să vizualizați modificarea în timp.

keepitreall89

Nu sunt sigur ce anume ai putea face cu asta, pentru că abia am început să mă gândesc la asta. Dar ai putea eventual să folosești o matrice 4D pentru un fel de simulare fizică de bază, cum ar fi modelarea zborului unui proiectil care implică unele valori ale vântului și altele. Asta mi-a venit în minte pentru că termenul 4D îmi aduce mereu în minte faptul că „poziția” oricărui obiect este formată din 4 valori, cu timpul ca fiind a 4-a valoare.

lõōsêr xxx

Fiind student la fizică, avem doar 3 dimensiuni ale spațiului, dar avem o a 4-a dimensiune care este timpul. Deci, gândindu-ne în acest fel, ne putem gândi la o matrice de orice dimensiune(1D sau 2D sau 3D) ale cărei valori diferă în funcție de timp sau la o matrice care ține evidența fiecărei matrice ale cărei valori s-au schimbat în funcție de timp.Se pare că ne este destul de cunoscută. De exemplu, „REGISTRUL DE PREZENȚĂ” pe care îl avem de obicei în clasă.

Acesta este punctul meu de vedere în această privință.

Asta e tot.Distracție plăcută 🙂

Igor F.

Ca să dau un exemplu concret pentru răspunsul lui Ishtar: Alinierea celor patru corzi. Pentru a calcula alinierea optimă a două șiruri de caractere, scrieți un șir de-a lungul unei axe (să zicem, orizontale) a unui array 2D (o matrice!) și celălalt de-a lungul celuilalt array. Matricea este umplută cu costuri de editare, iar alinierea optimă a celor două șiruri este cea care produce cel mai mic cost, asociat cu o cale prin matrice. O modalitate obișnuită de a găsi o astfel de cale este prin programarea dinamică menționată mai sus. Pentru detalii tehnice, puteți căuta „distanța Levenshtein” sau „distanța de editare”.

Ideea de bază poate fi extinsă la orice număr de șiruri. Pentru patru șiruri de caractere, ar fi nevoie de o matrice cu patru dimensiuni, pentru a scrie fiecare șir de-a lungul uneia dintre dimensiuni.

Cu toate acestea, în practică, alinierea mai multor șiruri de caractere nu se face în acest mod, din cel puțin două motive:

  1. Lipsa de flexibilitate: De ce ar fi nevoie să aliniați exact patru șiruri???? În biologia moleculară computațională, de exemplu, s-ar putea să doriți să aliniați mai multe șiruri (gândiți-vă la secvențe de ADN), iar numărul acestora nu este cunoscut în avans, dar rareori este de patru. Programul dumneavoastră ar fi util pentru o clasă foarte limitată de probleme.

  2. Complexitatea computațională, în spațiu și timp. Cerințele sunt exponențiale în funcție de numărul de dimensiuni, ceea ce face ca abordarea să fie nepractică pentru majoritatea scopurilor din lumea reală. În plus, majoritatea intrărilor dintr-o astfel de matrice multidimensională s-ar afla pe astfel de trasee suboptime, care nici măcar nu sunt atinse, astfel încât stocarea lor ar fi pur și simplu o pierdere de spațiu.

Așadar, pentru toate scopurile practice, cred că profesorul dvs. avea dreptate.