J'ai besoin de uniformément STRY> SELECT N EM> d'un tableau. Je suppose que la meilleure façon d'expliquer est par exemple. dire que j'ai: p> Array [0,1,2,3,4] Et j'ai besoin de sélectionner 3 numéros .. 0,2, 4. P> Bien sûr, si la longueur de la matrice <= n em>, j'ai juste besoin de retourner tout le tableau. P> Je suis à peu près sûr qu'il y a une algorithme défini pour cela, essayé de chercher, et j'ai examiné Introduction aux algorithmes em> mais je n'ai trouvé rien qui a répondu à mes besoins (probablement négligés) p> Le problème J'ai eu, c'est que je ne peux pas comprendre un moyen d'éviminer cela jusqu'à n'importe quel tableau [p..q], en sélectionnant n des éléments uniflysement. P> Remarque: je ne peux pas simplement sélectionner le même éléments de l'exemple ci-dessus .. p> Quelques autres exemples; p> Array [0,1,2,3,4,5,6], 3 éléments; J'ai besoin d'obtenir 0,3,6 de EDIT: P> Plus d'exemples: et oui, j'aimerais inclure Premiers et derniers éléments toujours. P> EDIT 2: P> Ce que je pensais était quelque chose comme .. premier + dernier élément, puis travaillez mon chemin en utilisant la valeur médiane. Bien que je sois coincé / confus quand j'essayais de le faire. P> Je vais regarder l'algo que vous postez. Merci! P> EDIT 3: P> Voici une version superbe de incrédiman em> solution avec PHP. Fonctionne également avec des tableaux associatifs, tout en conservant les clés. P> Vous pouvez probablement mettre en place un Itérateur Mais je n'ai pas besoin de le prendre si loin. P> p>
Array [0,1,2,3,4,5], 3 éléments; J'ai besoin d'obtenir 0, 2 ou 3, et 5 p>
Array [0,1,2], 2 elems: 0,2
Array [0,1,2,3,4,5,6,7], 5 elems: 0,2, 3 ou 4, 5,7 P>
5 Réponses :
Votre taille de pas est (Arraysize-1) / (N-1).
Il suffit d'ajouter la taille de l'étape à un accumulateur de point flottant et arrondissez l'accumulateur pour obtenir l'index de la matrice. Répéter jusqu'à ce que l'accumulateur> Taille du tableau. P>
let alors vous voulez des éléments aux indices let n + 1 code> Soyez le nombre d'éléments que vous souhaitez, déjà limité à la longueur de la matrice. P>
0 / n code>,
1/1 code>, ...,
n / n code> du chemin vers le fin de la matrice. p>
m + 1 code> est la longueur de la matrice. Ensuite, vos indices sont
rond (m * i / n) code> (avec la division effectuée avec un point flottant). P>
Ceci est une erreur. Avec un 0 code> -indexé de longueur
m code>, le dernier index doit être
M-1 code> pas
M code>, donc Les indices doivent être
rond ((M-1) * I / N) CODE> (division en virage flottant, comme indiqué).
J'apprécierais que si vous ajoutez un pseudo-code structuré .. Je pense que vous pourriez être sur la bonne voie, mais je ne vous suivez pas à 100%.
@Clurs: whoops. Fixé à m + 1 code> comme la longueur de la matrice. C'est ce que j'essayais de taper (comme avec le
n + 1 code>).
On dirait que vous souhaitez inclure les premier et les derniers éléments de votre liste. P>
Si vous souhaitez tirer des éléments X de votre liste d'éléments N, votre taille d'étape sera (N-1) / (x-1). Just arrondi, mais vous voulez que vous sortez chacun. P>
profiter! (Pseudo-code):
<? function Algorithm($N,$A){ $step=(sizeof($A)-1)/($N-1); for ($i=0;$i<$N;$i++) echo $A[round($step*$i)]." "; echo "\n"; } //some of your test cases: Algorithm(3,array(1,2,3)); Algorithm(5,array(0,1,2,3,4,5,6,7)); Algorithm(2,array(0,1,2)); Algorithm(3,array(0,1,2,3,4,5,6)); ?> Outputs: 1 2 3 0 2 4 5 7 0 2 0 3 6
Où est "pas" utilisé? Je ne vois que sa déclaration.
@ Nin, - TYPO. Devrait avoir plus de sens maintenant.
Damn mec, vérifié le lien CodpePad, en fonction de l'entrée => sortie, exactement ce que je cherchais. Je vais regarder dans la fonction demain et l'ajuster un peu, car maintenant, il est trop tard dans la nuit. Bravo Mate!
yo, a ajouté ma propre implémentation si vous êtes intéressé de jeter un coup d'œil;)
basé sur la réponse de @ rex em>. pseudocode em>! Ou certains pourraient même dire que c'est js em>
Quels sont les numéros selon vous? Soyez plus précis sur votre motif.
Je pense que vous avez besoin de plus d'exemples, car je ne comprends toujours pas ce que vous essayez de faire. Qu'en est-il des réparations plus longues et un nombre différent d'éléments à sélectionner?
Si je lis cela correctement, l'OP souhaite sélectionner un certain nombre d'éléments de tableau dont les indices suivent un modèle régulier. Je pense que la réponse de Rex Kerr pourrait mieux expliquer ce qui se demande ici.