Comment puis-je améliorer mon ingéniosité algorithmique?
-
28-09-2020 - |
Question
Pendant le sous-traitant, j'ai senti que mon éducation était principalement composée d'appliquer la théorie existante aux problèmes du monde réel (c.-à-d. Design d'algorithme / analyse).J'ai vu des dérivations de nombreux algorithmes et preuves de leur complexité, mais je suis souvent laissé gênée par la question de la façon dont on vient découvrir un algorithme.Il semble intimidant d'imaginer à développer un nouvel algorithme compte tenu de l'ingéniosité impliquée dans la création d'une approche efficace.Je me demande s'il y a des moyens de former cette ingéniosité.
Ma question est que je peux cultiver les compétences nécessaires pour développer des approches originales en matière de problèmes quantitatifs?Y a-t-il des ressources qui se concentrent sur ces compétences?
La solution
Il semble que la programmation concurrentielle pourrait vous aider. Ou juste la partie "programmation" de celui-ci. Si vous voulez manifester vos compétences en résolution de problèmes (et donc votre capacité à proposer des idées originales), il semble que la résolution de problèmes concurrentiels soit la voie à suivre, car elles sont en conception ciblant cette compétence.
Vous auriez besoin de deux types de ressources: Archives à problèmes et matériaux théoriques.
Pour les archives de problèmes, je peux vous suggérer d'essayer
- Timus.Online (problèmes nécessitant des idées intelligentes / observations commencent après ~ 270 Difficulté)
- codeforces.org (onglet de problèmes, plus riche de problèmes, mais la qualité globale est quelque peu inférieure à celle du timus )
- Onlinejudge.org (à Uhunt il y a une table avec des problèmes qui couvrent une grande variété de problèmes; un supplément pour le Réservez la programmation compétitive 3)
- uRionlineJudge.com.br (a de grands problèmes)
Aussi, il y a atcoder.co.jp , qui est comme des coolforces mais cible principalement des problèmes liés aux mathématiques.
La clé pour trouver des idées originales est de savoir ce que les gens ont déjà marché. Si vous comprenez ces idées et que vous pouvez les appliquer relativement facilement, vous pouvez trouver une idée intelligente en combinant ces idées plus anciennes de manière intelligente et b) vous pouvez rechercher des idées fondamentalement nouvelles beaucoup plus efficacement parce que vous savez ce qui n'est pas une nouvelle idée et quelle n'est pas la nouvelle façon de penser à trouver de nouvelles idées.
Si vous êtes d'accord avec le paragraphe précédent, vous aurez besoin de ressources dans lesquelles vous pourrez apprendre de nouveaux concepts et idées. La clé avec ceci est de comprendre non seulement le théorème ou l'algorithme, mais également pour comprendre l'intuition et la (les) preuves (s) également. Les preuves donnent une idée explicite sur la façon de trouver et de savoir comment s'assurer que l'idée fonctionne. Comprendre les astuces et les algorithmes (de pensée) utilisés dans les preuves est la clé de proposer vos propres idées.
L'intuition, d'autre part, est une perspicacité implicite, c'est quelque chose qui relie les problèmes, ses preuves (ou un sous-ensemble de preuves) et le sujet du problème en général. Je dis cela afin que vous ne pensais pas que l'intuition est quelque chose de magique ou que si vous ne l'avez pas obtenu lorsque vous lisez une preuve, vous ne l'auriez pas du tout. Pour l'acquérir, vous devez effectuer ces étapes
- Avant de voir la solution, essayez de penser à au moins 30 minutes (pour moi, Doodling aide beaucoup à proposer des solutions intuitives)
- Alors, si vous sentez que certaines idées que vous pensez aller travailler 100% sont là, mais vous ne pouvez pas les atteindre tout à fait dans votre cerveau, n'abandonnez pas et tenez-les jusqu'à ce que vous alliez à dormir. Si vous ne pourrez pas dormir de la pensée sur le problème, vous êtes certain que vous avez des perspectives lorsque vous vous réveillez. ( https://psychologie.stackexchange.com/a/13366 + mon expérience).
- sans dépendance de la question de savoir si vous avez résolu le problème ou non après une telle procédure, lorsque vous allez ouvrir la (s) preuves (s), vous pourrez absorber et les analyser beaucoup plus efficacement, car vous allez lire ne pas connaître les idées, mais pour savoir pourquoi vos idées ne fonctionnaient pas, à quelle proximité étiez-vous, où vous avez commis une erreur dans votre pensée, qu'as-tu manqué, pourquoi cette chose que vous avez trop concentrée ne s'est trop importante. , Qu'avez-vous dû savoir pour le résoudre quand même, etc. (c'est ainsi que SQ3R < / a> méthode fonctionne également, il vous fait remettre en question le texte en premier et ne vous permet que de le lire comme moyen de répondre aux questions; une lecture active, au lieu de la lecture passive).
- Si vous pouviez extraire une intuition efficace des preuves, félicitations! Maintenant, oubliez ce problème et revenez après deux ou trois jours et résolvez un autre problème similaire ou un peu plus difficile sur le même sujet. De cette façon, vous "imprimer" cette intuition dans votre cerveau, pour ainsi dire, pour un moment relativement long (voir, Répétition espacée )
- Si vous ne l'avez pas fait alors ne soyez pas triste. Vous avez compris plus ou moins comment les preuves fonctionnent. Cela signifie que la seule chose qui reste est de les unir en quelque sorte avec l'intuition. Pour ce faire, continuez simplement de résoudre des problèmes sur le même sujet général (chaînes, graphiques, théorie des nombres, etc.). L'intuition n'est pas liée à un problème concret (si tel était, l'intuition ne pourrait pas aider à résoudre d'autres problèmes), si vous comprenez que vous comprenez les intuitions derrière d'autres problèmes, vous comprendrez naturellement l'intuition derrière le problème initial. !
D'accord, donc. Avec cela, vous pourrez saisir efficacement les anciennes idées, comprendre l'intuition et l'ingénieur
y derrière eux. Ce sont des ressources plausibles (bien que, je pense que vous pourriez déjà les utiliser):- Introduction aux algorithmes. Cormen
- geekforgeeks.com
- wikipedia.com (sérieusement, ils ont de grands articles sur certains algorithmes)
- VisualGo.net (surtout, si vous êtes un apprenant visuel;)
De mon expérience à ce stade, vous pourrez venir avec des idées originales par vous-même et naturellement. Vous serez capable de voir les connexions entre les idées clairement et ils commenceront à simplement faire tomber dans votre tête. La résolution des problèmes subira les chemins de neurones dans votre cerveau et vous n'oublierez pas la base théorique et l'intuition que vous avez construites. Les problèmes de résolution construiront également de nouvelles connexions neurales et apporteront la joie lors de la découverte de nouvelles perspectives.
Enfin, je tiens à dire que si votre perspicacité n'est rien que vous avez appris auparavant, alors il a de la valeur. Si vous combinez deux idées ensemble, même si c'était simple, vous aurez une nouvelle idée et cela aura de la valeur. Chaque fois que vous proposez de telles idées, dans tous les cas, vous créez quelque chose de précieux. Si votre objectif serait de trouver quelque chose de précieux, vous réussirez à chaque fois. Si votre objectif serait de proposer une "perspicacité originale", vous serez alors rapidement démotivé, car peu importe ce que vous ferez, vous échouerez probablement (au début à coup sûr). En fin de compte, si vous suivez ces étapes ou quelque chose de similaire, vous ne pouvez pas vous empêcher! Sûrement, quelque peu dans le futur, chaque dixième de vos idées sera vraiment originale;)