Rejsende sælgerproblem ved hjælp af filial og bundet
I betragtning af et sæt byer og afstand mellem hvert par byer er problemet at finde den kortest mulige turné, der besøger hver by nøjagtigt en gang og vender tilbage til udgangspunktet.
I betragtning af et sæt byer og afstand mellem hvert par byer er problemet at finde den kortest mulige turné, der besøger hver by nøjagtigt en gang og vender tilbage til udgangspunktet.
Problem: Givet 2 proces I og J, skal du skrive et program, der kan garantere gensidig udelukkelse mellem de to uden yderligere hardwarestøtte.
Generering af tilfældige sorterede arrays Vi opbevarer de tilfældige array -elementer i en matrix og sorterer det derefter og udskriver det.
Givet et tal 'n' og et n tal, sorter tallene ved hjælp af Concurrent Merge Sort. (Tip: Prøv at bruge shmget, shmat-systemkald).Del 1: Algoritmen (HVORDAN?) Lav rekursivt to underordnede processer, en til venstre halvdel og en til højre halvdel. Hvis antallet af elementer i arrayet for en proces er mindre end 5, skal du udføre en indsættelsessortering. Forælderen til de to børn slår derefter resultatet sammen og vender tilbage til forælderen og så videre. Men hvordan gør du det samtidig? Del 2: Det logiske (HVORFOR?) Den vigtige del af løsningen på dette problem er ikke algoritmisk, men at forklare begreber om operativsystem og kerne. For at opnå samtidig sortering har vi brug for en måde at få to processer til at arbejde på samme array på samme tid. For at gøre tingene lettere leverer Linux en masse systemkald via simple API-endepunkter. To af dem er shmget() (til delt hukommelsesallokering) og shmat() (til delt hukommelsesoperationer). Vi skaber et fælles hukommelsesrum mellem børneprocessen, som vi gafler. Hvert segment er opdelt i venstre og højre underordnede, som er sorteret, den interessante del er, at de arbejder samtidigt! shmget() anmoder kernen om at allokere en delt side for begge processer. Hvorfor fungerer traditionel fork() ikke? Svaret ligger i, hvad fork() faktisk gør. Fra dokumentationen opretter 'fork() en ny proces ved at duplikere den kaldende proces'. Den underordnede proces og forældreprocessen kører i separate hukommelsesrum. På tidspunktet for fork() har begge hukommelsespladser det samme indhold. Hukommelsesskrivninger, fil-deskriptor(fd) ændringer osv. udført af en af processerne påvirker ikke den anden. Derfor har vi brug for et delt hukommelsessegment.
Givet et array af positive heltal, udskift hvert element i arrayet, således at forskellen mellem tilstødende elementer i arrayet er mindre end eller lig med et givet mål. Vi skal minimere tilpasningsomkostningerne, det vil sige summen af forskelle mellem nye og gamle værdier. Vi er grundlæggende nødt til at minimere ?|A[i] - På ny[i]| hvor 0? jeg ? n-1, n er størrelsen af A[] og Anew[] er arrayet med tilstødende forskel mindre end eller lig med målet. Antag, at alle elementer i arrayet er mindre end konstant M = 100.
Givet et heltal n, der repræsenterer antallet af cifre. Opgaven er at udskrive alle n-cifrede tal, således at den absolutte forskel mellem summen af cifre på lige positioner og ulige positioner er nøjagtig 1. Bemærk: Tallet bør ikke starte med 0 (førende nuller er ikke tilladt).
Givet et simpelt udtrykstræ, bestående af grundlæggende binære operatorer, dvs. + , - ,* og / og nogle heltal, evaluer udtrykstræet.
Givet antal cifre n, udskriv alle n-cifrede tal, hvis sum af cifre summeres til den given sum. Løsningen bør ikke overveje førende 0'er som cifre. Eksempler:
Givet to heltals arrays, tilføje deres elementer til tredje array ved at opfylde følgende begrænsninger -
Givet et array af heltal, find om det er muligt at fjerne nøjagtigt et heltal fra arrayet, der deler arrayet i to subarrays med samme sum.
Givet et array, der indeholder både positive og negative heltal, skal du finde produktet af den maksimale produktunderarray. Forventet tidskompleksitet er O(n), og kun O(1) ekstra plads kan bruges.
Givet et array arr[] og et heltal k, find arrayet efter at have vendt hver subarray af på hinanden følgende k elementer på plads. Hvis det sidste underarray har færre end k elementer, skal du vende det, som det er. Rediger arrayet på plads, returner ikke noget.
Givet en liste over heltal, omarranger listen, så den består af skiftende minimumsmaksimumselementer, der kun bruger listeoperationer. Listens første element skal være minimum, og andet element skal være maksimum af alle elementer på listen. På samme måde vil tredje element være næste minimumselement, og fjerde element er næste maksimumelement og så videre. Brug af ekstra plads er ikke tilladt. Eksempler:
Givet et interval [n,m], find antallet af elementer, der har ulige antal faktorer i det givne interval (n og m inklusive). Eksempler:
Givet et binært array af størrelse n hvor n > 3. En sand (eller 1) værdi i arrayet betyder aktiv og falsk (eller 0) betyder inaktiv. Givet et tal k, er opgaven at finde antallet af aktive og inaktive celler efter k dage. Efter hver dag bliver status for i'te celle aktiv, hvis venstre og højre celler ikke er ens, og inaktive, hvis venstre og højre celle er ens (begge 0 eller begge 1).
Givet en matrix med n unikke heltal, hvor hvert element i matrixen er i området [1, n]. Arrayet har alle distinkte elementer og størrelsen af arrayet er (n-2). Derfor mangler der to tal fra området i denne matrix. Find de to manglende tal.
Givet et sorteret array med n ensartet fordelte værdier arr[], skriv en funktion til at søge efter et bestemt element x i arrayet. Lineær søgning finder elementet i O(n) tid, Jump Search tager O(n) tid og binær søgning tager O(log n) tid. Interpolationssøgningen er en forbedring i forhold til binær søgning i tilfælde, hvor værdierne i et sorteret array er ensartet fordelt. Interpolation konstruerer nye datapunkter inden for rækkevidden af et diskret sæt af kendte datapunkter. Binær søgning går altid til det midterste element for at kontrollere. På den anden side kan interpolationssøgning gå til forskellige steder i henhold til værdien af den nøgle, der søges efter. For eksempel, hvis værdien af nøglen er tættere på det sidste element, vil interpolationssøgning sandsynligvis starte søgning mod slutningen. For at finde den position, der skal søges, bruger den følgende formel.
Givet en række af n forskellige elementer. Find det maksimale produkt af Minimum af to tal i matrixen og den absolutte forskel på deres positioner, dvs. find maksimumværdien af abs(i - j) * min(arr[i], arr[j]), hvor i og j varierer fra 0 til n-1.
Givet en matrix, der indeholder positive og negative tal. Arrayet repræsenterer kontrolpunkter fra den ene ende til den anden ende af gaden. Positive og negative værdier repræsenterer mængden af energi ved det pågældende kontrolpunkt. Positive tal øger energien og negative tal falder. Find den mindste startenergi, der kræves for at krydse gaden, således at energiniveauet aldrig bliver 0 eller mindre end 0.