Ich spielte mit this Code Kata in Haskell, und ich stieß auf die Frage in dem Thema.Holen Sie sich die Mitte eines Ix-Bereich in O (1) Zeit in Haskell
Es ist trivial, den Mittelpunkt eines Arrays zu finden, dessen Indizes ein einzelner numerischer Wert sind, aber Haskells Array-Indizes können jede Instanz der Ix-Typklasse sein, z. B. das Tupel (Int, Word, Card) ist eine Instanz von Ix, aber nicht von Num.
Eine Möglichkeit, den Mittelpunkt des Arrays zu erhalten, besteht darin, seine Länge abzufragen, die Liste der Indizes abzufragen und die Hälfte dieser Liste zu löschen, aber dies erfordert O (n) Zeit.
Kennt jemand eine Möglichkeit zu indizieren, um es in konstanter Zeit zu tun? Ich habe das Gefühl, dass es einen geben sollte, da ein Ix-Bereich mit einem ganzzahligen Bereich bijizieren soll.
Wenn es wirklich eine Bijektion existiert, warum dann nicht auf ganze Zahlen abzubilden, den Mittelpunkt berechnen und dann die inverse nehmen Sie es zurück zur Karte Typ Zeigte ? Ich habe keine Ahnung, welche Art von Mechanismus dies in Haskell erlauben würde, aber es scheint möglich? – Gian
Die Funktion 'index' in der' Ix' Klasse ist ein Teil der Bijektion, die Indizes auf ganze Zahlen abbildet, aber die andere fehlt, soweit ich das beurteilen kann. – yatima2975