er der nogle som vil hjælp mig med opgaven.. opgaven går ud på at:
We are given an array that contains N numbers and would like to determine if there are two numbers whose sum equals a given number K. For example we may be given the sequence 4,1,5,2,6,3 and are asked to find a pair of numbers with a sum of 10. In this example 4 and 6 is a valid result.
1) Implement an O(N2 ) algorithm for solving the problem 2) Implement an O(N Log(N)) algorithm for solving the problem
jeg ved ikke hvordan jeg skal implementere det ....
/** * public method exposed to client, sorts given array using QuickSort * Algorithm in Java * @param array */ public static void quickSort(int[] array) { recursiveQuickSort(array, 0, array.length - 1); }
/** * Recursive quicksort logic * * @param array input array * @param startIdx start index of the array * @param endIdx end index of the array */ public static void recursiveQuickSort(int[] array, int startIdx, int endIdx) {
int idx = partition(array, startIdx, endIdx);
// Recursively call quicksort with left part of the partitioned array if (startIdx < idx - 1) { recursiveQuickSort(array, startIdx, idx - 1); }
// Recursively call quick sort with right part of the partitioned array if (endIdx > idx) { recursiveQuickSort(array, idx, endIdx); } }
/** * Divides array from pivot, left side contains elements less than * Pivot while right side contains elements greater than pivot. * * @param array array to partitioned * @param left lower bound of the array * @param right upper bound of the array * @return the partition index */ public static int partition(int[] array, int left, int right) { int pivot = array[left]; // taking first element as pivot
while (left <= right) { //searching number which is greater than pivot, bottom up while (array[left] < pivot) { left++; } //searching number which is less than pivot, top down while (array[right] > pivot) { right--; }
// swap the values if (left <= right) { int tmp = array[left]; array[left] = array[right]; array[right] = tmp;
//increment left index and decrement right index left++; right--; } } return left; } }
* smid 1. item i et b-træ * med item fra nr 2 til n med b-træ's search function sålænge item's dif til sum ikke findes insert item i b-trae ellers fundet
Umiddelbart har du ikke noget at bruge den quick sort kode til. Jeg foreslog at sortere som en del af #2 men der er indbygget funktionalitet i Java standard bibliotek til at sortere.
Kan du ikke give et eksempel på hvordan jeg kunne implementere det.. fordi jeg er helt væk... og jeg forstår ikke helt hvordan jeg skal løse problement
Jeg forsoeger faktisk at hjaelpe. Men at skrive et par stumper kode til dig som du ikke forstaar er ikke nogen rigtig hjaelp. Hele pointen med saadan en oevelse er jo at du skal laere noget.
Proev og tag 4 stykker papir og skriv 1, 2, 3 og 4 paa dem. Laeg dem paa bordet i tilfaeldig orden. Hvilke kombinationer af 2 stykker papir vil matche at summen af tallene er 5.
Jeg er sikker paa at du kan finde dem uden overhovedet at taenke over det.
Tricket er at taenke over det. Hvad goer du rent faktisk trin vist for at loese opgaven. Skriv det ned paa almindeligt dansk i punkt form.
Naar du har det saaa har du en algoritme!!
Derefter skal du have "oversat" algoritmenten fra dansk til Java.
public class sum { public static void main (String[] arg) { int i = [1,2,3,4,5,6,7,8,9,10] int sum = 0; for ( int i =0 i < 10; i++ ){ system.out.println( sum" : " ") } for if( sum < 10 ){ system.out.println( sum) } int start= 1; Stopwatch data =Stopwatch.createStarted(); while(start<=){ System.out.println(sum(start)); start++;
Hvis vi lige der bort fra alle syntax-fejlene, så opretter du et int-array (i) med tallene fra 1 til 10, samt en int (sum) som du assigner værdien 0. Så udskriver du vist nok noget med sum (som du lige har sat = 0) 10 gange i træk.
Hvis sum er mindre end 10 (og det er den, for den er jo stadig 0), så udskriver du den så igen.
Så opretter og starter du et stopwatch-object, hvorefter du kører et while-loop så længe start (som du lige har sat = 1) er mindre eller lig med.. Ingenting? I dette while-loop prøver du at udskrive noget med sum og start, hvorefter du tæller start 1 op.
Når så konditionen ikke længere er opfyldt, så stopper du stopwatch'en, og udskriver antallet af mikrosekunder, den har kørt.
Hvordan skulle det på nogen måde løse den opgave, du har stillet???
Jeg har lige kommenteret på din kode. Igen ser vi bort fra syntax-fejl (jeg har ikke pillet ved Java i ca. et halvt årti, så det er jeg nok alligevel ikke den rigtige til at rette).
public class Sum {
public static void main(String[] args) { // TODO Auto-generated method stub¨
public int sum1(v){ // Hvad er variablen v?? int sum[] = new int[10]; // Du erklærer et array med længden 10, men du fylder intet i det
// Du traverserer arrayet, men bruger ikke arrayets elementer til noget // (men du har jo heller ikke fyldt nogen elementer i det). // I stedet lægger du i sammen med i og gemmer resultatet i variablen sum2 // (som du ikke tilgår senere). for (int i = 0; i < sum.length; i++){ int sum2 = i+ i;
}
// Du traverserer igen arrayet, og tjekker om hvert enkelt element er lig med værdien af v. // Hvis den er det, så returnerer du elementets index. for (int i = 0; i < sum.length; i++){ if( sum[i] == v) return i; }
} }
}
Har du selv skrevet koden? Igen ser det ikke ud til at have noget som helst med den stillede opgave at gøre...
Så svaret på spørgsmålet:
"Er er der nogle som kan se hvad jeg har lavet forkert ??"
må være: stort set alt!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.