Dat is de recursie, dat 'weet' het programma niet van te voren. Stel nu dat waarde[] ={1,3,2} Verdeelbaar(1,1,0) wordt eerst gedaan. D.w.z. item 1 is verdeeld, en boef A heeft nu een buit van 1 te pakken. Daarna wordt ook de aanroep verdeelbaar(2,4,0) gedaan (boef A krijgt ook item 2), en daarna nog eens verdeelbaar(3,6,0) (hij krijgt ook item 3). Nu zag jij waarschijnlijk al van te voren aankomen dat het geen slimme zet was om boef A ook item twee te geven, maar een computer beschouwt niet zo het totale plaatje, het kan alleen beslissen wat het met dit item hier en nu moet doen. Als uiteindelijk alles verdeeld is (i==3), dan kijkt het of buitA = buitB (wat niet het geval is) en dan geeft het dus 'false' terug. Het programma gaat nu weer een stapje terug in de recursie (het zegt eigenlijk: Okay, boef A, geef jij je laatste item maar terug, want dit werkte niet). En geeft het dan aan boef B. Dan is weer alles verdeeld, nu in een 4 vs. 2 verhouding, en dan kijkt het of dat netjes is, en dat is ook niet zo.quote:Op woensdag 21 juni 2006 14:36 schreef Haushofer het volgende:
Het lichtje gaat steeds feller branden
Nog 1 vraagje dan: hoe weet het programma of de verdeling goed is, in regel 5 of 7 ? Het is denk ik nou wel duidelijk dat ik erg veel moeite heb met recursieve methodes... bijvoorbeeld, als je dan waarde[]={1,2} neemt. Het programma gaat kijken in regel 5 of er dan geldt: verdeelbaar(1,1,0) == true. Dus of het een goed idee is om het eerste artikel aan boef A te geven. Waar wordt berekend of dit een goed idee is of niet? Ik zie dat nergens in het programma terug.
Als ik dit vandaag nog ga bevatten, worden jullie bij deze gepromoveerd tot koningen![]()
| 1 2 3 4 5 6 7 8 9 10 11 | / \ /--- ---\ / \ (1,0) (0,1) / \ / \ / \ / \ (4,0) (1,3) (3,1) (0,4) / \ / \ / \ / \ (6,0)(4,2)(3,3)(1,5) (5,1)(3,3)(2,4)(0,6) ^^^ ^^^ |
Ja, ik snap emquote:Op woensdag 21 juni 2006 14:53 schreef Iblis het volgende:
[..]
Dat is de recursie, dat 'weet' het programma niet van te voren. Stel nu dat waarde[] ={1,3,2} Verdeelbaar(1,1,0) wordt eerst gedaan. D.w.z. item 1 is verdeeld, en boef A heeft nu een buit van 1 te pakken. Daarna wordt ook de aanroep verdeelbaar(2,4,0) gedaan (boef A krijgt ook item 2), en daarna nog eens verdeelbaar(3,6,0) (hij krijgt ook item 3). Nu zag jij waarschijnlijk al van te voren aankomen dat het geen slimme zet was om boef A ook item twee te geven, maar een computer beschouwt niet zo het totale plaatje, het kan alleen beslissen wat het met dit item hier en nu moet doen. Als uiteindelijk alles verdeeld is (i==3), dan kijkt het of buitA = buitB (wat niet het geval is) en dan geeft het dus 'false' terug. Het programma gaat nu weer een stapje terug in de recursie (het zegt eigenlijk: Okay, boef A, geef jij je laatste item maar terug, want dit werkte niet). En geeft het dan aan boef B. Dan is weer alles verdeeld, nu in een 4 vs. 2 verhouding, en dan kijkt het of dat netjes is, en dat is ook niet zo.
De functie heeft nu zowel een keer geprobeerd om item 2 aan boef A als B te geven en beide willen niet, het betekent dus dat het nog een stap terug moet doen. Zowel het tweede als het derde item worden als het ware teruggevorderd, en het proces herhaalt zich deels. Nu krijgt B item twee met waarde 3, dan komt er weer een recursieve aanroep, en dan wordt item 3 weer eerst aan boef A gegeven. Nu is weer alles verdeeld, en tadaa, ze hebben beide een buit met waarde 3. Dat komt goed uit, dus het programma geeft 'true' terug (ik heb een werkende verdeling gevonden!).
Het checkt dus pas zodra alles verdeeld is of dat een goed idee is (bij nader inzien), en zo niet, doet maakt het eerst z'n laatste move ongedaan en probeert daar een andere optie, tenzij die er niet meer is, dan moet het nog een move extra ongedaan maken.
Het wordt meestal als een boom getekend als je het grafisch wilt weergeven:
[ code verwijderd ]
Zelf vind ik dit tamelijk verhelderend. Het begint dus in de situatie dat beide dieven niets hebben (0,0), dan loopt je programma eerst helemaal naar beneden in de boom (verdeling 6,0), en het concludeert dat dat niet werkt, dus het gaat een stapje terug en neemt daar de andere tak, dat werkt ook niet, dus het moet twee stapjes terug om bij de afslag (1,0) nu de andere tak te nemen, daar kiest het weer eerst de linker (omdat het zo geprogrammeerd is), en daar is het correct, en dan breekt het ook direct af. Als er geen verdeling is, dan loopt het echter de gehele boom door en zal het overal beneden uitkomen voordat het kan concluderen dat het niet werkt.
Of iets een goede keus is blijkt dus uit het plaatje dat een bepaald punt in de boom een 'goede oplossing' onder zich heeft, maar dat ziet dat programma niet van te voren, daarvoor moet het uitgevoerd worden.
Nou, bij dezequote:Op woensdag 21 juni 2006 14:36 schreef Haushofer het volgende:
Als ik dit vandaag nog ga bevatten, worden jullie gepromoveerd tot koningen![]()
To iterate is human; to recurse, divine.quote:Op woensdag 21 juni 2006 15:05 schreef Haushofer het volgende:
Ja, ik snap emPrachtig zeg, een paar uur terug snapte ik er nog helemaal geen hol van. Mooi is dat. Dankjewel, en Thabit en Glowmouse ook natuurlijk ! Zo'n plaatje is inderdaad erg handig. Ik ben zelf altijd geneigd om problemen iteratief op te lossen ( die paar problemen die ik dan heb opgelost
), recursie vind ik op de een of andere manier een stuk lastiger.
Gegeven is al dat het product defect is, wat is nu de kans dat het met machine C is geproduceerd.quote:Op woensdag 21 juni 2006 15:11 schreef Kindervriend het volgende:
Okay, komt weer een n00b vraag van mij, wederom kansberekening.
Er zijn 3 machines. A, B en C.
A neemt 10% van de productie voor zijn rekening. B 30% en C 60%.
De kans op een defect product met machine A is 7%. Bij B is het 3% en bij C 1,5%.
Vraag: Wat is de kans dat een willekeurig defect product is geproduceerd met machine C?
Om hier nog even op terug te komen, het kan ook geheel met de rekenregels:quote:Op woensdag 21 juni 2006 13:19 schreef GlowMouse het volgende:
[..]
Omdat P(A)P(B) != P(A door B) weet je dat A en B afhankelijk zijn. Omdat P(A|B) en P(B|A) niet gegeven zijn, moet je goed kijken. Je moet dus goed kijken
Nu zie je dat P(A door B) en P(B) zijn gelijk. Probeer hier eens verder mee te komen. Als dit niet lukt, maak dan een venn-diagram![]()
| 1 |
if (...) en ... moet een boolean waarde zijn. In dit geval is het resultaat van de methode die op de plaats van ... staat een boolean waarde dus dat zit in dit geval goed. Dus hoewel je if (functie() == true) zou kunnen schrijven, is het niet nodig aangezien de returnwaarde al van het type boolean is.quote:Op woensdag 21 juni 2006 13:35 schreef Haushofer het volgende:
[..] De if(.....) is gewoon een afkorting voor if(....) = true, neem ik aan.
[..]
| 1 2 3 | return x == y; } |
Geweldig, ik begrijp het ineens! Heel erg bedank !quote:Op woensdag 21 juni 2006 21:09 schreef GlowMouse het volgende:
0,14g kalkaanslag komt overeen met ... mol CaCO3
Omdat er (zie reactievergelijking) per mol CaCO3 twee mol HCOOH reageert, is er totaal ... mol HCOOH nodig om alle CaCO3 te laten reageren.
Omdat er totaal 26,4 mmol HCOOH aanwezig was, is er na de reactie nog ... mmol HCOOH aanwezig.
Dit komt overeen met ... gram.
Ik heb helaas geen tabel om alle molmassa's uit te rekenen, maar dit is wel de aanpak.
Zoiets was ik ook van planquote:Op woensdag 21 juni 2006 20:54 schreef Wolfje het volgende:
Haushofer,
Ik zou ook nog iets als
[ code verwijderd ]
in je programmaatje zetten.
Hiermee voorkom je dat je computer heel veel onzinnig werk gaat doen. Als buitA (of buitB) immers al meer dan de helft is, zal het zeker niet minder worden, dus dan kan je gelijk stoppen. Ik ga er dan wel vanuit dat alle waarden niet negatief zijn. Een dergelijk trucje valt in de categorie branch & cut algoritme. Als ze wel negatief mogen zijn, kun je nog steeds wel een soortgelijke grens bepalen.
Hoe het precies zit met het verschil tussen static methodes en class methodes weet ik niet, maar het heeft volgens mij weinig te maken met de keuze om je variabelen static te maken.quote:Waarom moeten die functies van je eigenlijk static zijn? Volgens mij werkt het dan alleen als waardes ook een static variabele is en dat is een beetje vreemd.
Hij bedoelt waarschijnlijk dat de array met waardes ook static zal moeten zijn.quote:Op vrijdag 23 juni 2006 08:31 schreef Haushofer het volgende:
Hoe het precies zit met het verschil tussen static methodes en class methodes weet ik niet, maar het heeft volgens mij weinig te maken met de keuze om je variabelen static te maken.
| 1 2 3 | int huidigeversnelling; public void schakel(int versnelling) { huidigeversnelling = versnelling;}; |
Noem X de levensduur van de accu. Er geldt X~N(5,4). Spreek uit: N is normaal verdeeld met parameters 5 en 4. 5 is de verwachting, 4 de variantie.quote:Op vrijdag 23 juni 2006 10:08 schreef superhero87 het volgende:
Hoe moet ik dit berekenen in mn rekenmachine:
De levelnsduur van een autoaccu blijkt normaal verdeeld te zijn met een gemiddelde levensduur van 5 jaar en een standaarddeviatie van 2 jaar
a: Bereken de kans dat een accu binnen de garantietermijn kapot gaat
b: Bereken de kans dat een accu binnen 1 jaar na het verstrijken van de garantietermijn kapot gaat
c: De leverancier wil nu een garantietermijn vaststellen van a jaar. Deze a moet de eigenschap hebben dat de levensduur van 96% van de geleverde accu's minstens gelijk is aan a jaar. Bepaal a
Alvast heel erg bedankt!
Je hebt dit sneller met pen en papier en simpel rekenmachine uitgerekend, dan dat je moet uitzoeken hoe dit werkt met een grafisch rekenmachine.quote:Op vrijdag 23 juni 2006 10:08 schreef superhero87 het volgende:
Heb weer Statistiek voor het eerst in 3 jaar...
En ben natuurlijk vergeten hoe ik allemaal dingetjes moet berekenen met mn grafische rekenmachine...
Hoe moet ik dit berekenen in mn rekenmachine:
De levelnsduur van een autoaccu blijkt normaal verdeeld te zijn met een gemiddelde levensduur van 5 jaar en een standaarddeviatie van 2 jaar
a: Bereken de kans dat een accu binnen de garantietermijn kapot gaat
b: Bereken de kans dat een accu binnen 1 jaar na het verstrijken van de garantietermijn kapot gaat
c: De leverancier wil nu een garantietermijn vaststellen van a jaar. Deze a moet de eigenschap hebben dat de levensduur van 96% van de geleverde accu's minstens gelijk is aan a jaar. Bepaal a
Alvast heel erg bedankt!
Helaas is de cumulatieve verdelingsfunctie van de standaardnormale verdeling niet zo eenvoudig gedefinieerd. Zonder tabel of GR is het onmogelijk tot een oplossing te komen, tenzij het om een bekende bovengrens gaat, zoals 0 of 1,645.quote:Je moet dan wel eerst de verdeling standaardiseren, dan kun je deze problemen simpel oplossen met de cumulatieve verdelingsfunctie van de standaard normaal verdeling.
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |