Zeiger auf ein Datenstück der Größe 4 oder 8 Byte.
Die Größe hängt wegen der Ausrichtung von der Plattform ab. Wenn Sie etwas wie pragma pack 1 verwenden, wird die Größe gleich sein (wahrscheinlich 1 Byte)
Manchmal schaue ich auch in VS C++, kompiliere im asm-Listing-Modus und schaue es mir dann an, dann wird vieles klar. Ja, es klingt beängstigend, aber asm ist die absolute Wahrheit in letzter Instanz. Und die Sprache ist nicht schwer zu verstehen. Es ist schwer, es richtig zu schreiben))
Это рекурсия просто. Быстрая сортировка как раз таки и применяет рекурсивный вызов функции. О принципах, преимуществах и недостатках ее использования можете почитать в интернете. И да, это применительно к любому ЯП. В кратце скажу, что главное требование рекурсии - это то, что бы последующий вызов рекурсии приближал алгоритм к завершению. Ну и главный недостаток это требование к оперативной памяти при большое обработке данных, так как каждый вызов такой рекурсии будет блокировать память.... Простой пример с рекурсией на том же си и нахождению факториала в 2 вариациях.
1) Рекурсия внутри 1 функции:
longlong Factorial(int n){
if(n == 1) return1;
return n * Factorial(n-1); // Здесь выполнил требование приближение рекурсии к завершению(то есть n стремится к 1(где исполнится условие выше))
}
2) Рекурсия между несколькими функциями:
int Fun2(int); // Прототип.int Fun1(int i){
if(i == -5){return i;}
return i + Fun2(i-1);
}
int Fun2(int i){
if(i == -5){return i;}
return i + Fun1(i-1);
}
SZZY: gegoogelt und keinen anderen Hamming-Quellcode gefunden, Links zu anderen Quellen sind willkommen (nicht das Hopfield-Netzwerk!!! - google gibt sie immer zusammen)
Ich möchte diesen Quellcode nach MQL portieren, aber ich bin nicht sicher, ob ich std::deque behandeln kann.
es ist eine bidirektionale Liste. der obige Code hat nur push_back so Chancen sind Sie es mit einem Vektor ersetzen können.
Wenn nicht, können Sie eine einfache Implementierung von deque über Array mit einer Reserve vom Anfang und Ende machen. in STL ist es irgendwie auf diese Weise implementiert.
Dies ist eine bidirektionale Liste. In dem obigen Code gibt es nur push_back, so dass es eine Chance, dass es durch einen Vektor ersetzt werden kann.
Falls nicht, können Sie eine einfache Implementierung von deque über Array mit Start- und Endredundanz durchführen.
Ich habe std::deque gegoogelt und es ist wie Sie schreiben, aber... Ich weiß nicht, wie ich es verwenden soll, und ersetze es einfach durch einen Vektor... Im Allgemeinen ist das Beispiel ein Tutorium, ich würde es nicht vermasseln wollen und sicher sein, dass es so ist, wie es falsch funktionieren soll ))))
ZS: Es gibt auch ein Beispiel in F# - aber ich denke, das ist zu viel ;)
SZY: gegoogelt, dass ich nicht auf die Schnelle andere Hamming-Netzwerk-Quellen gefunden habe, Links zu anderen Quellen sind auch willkommen (es ist nicht net Hopfield!!! - google gibt sie immer zusammen)
Igor, ich glaube nicht, dass es sinnvoll ist, ein Deque zu schreiben, ein Vektor wird in den allermeisten Fällen ausreichen. Ich habe Ihr Beispiel mit einem Vektor aus dem Thread über stl neu geschrieben:
#include <myincl/1_mystd.mqh>
template <typename T>
void fill_vector_from_array(vector_fund<T> &dest, const T &src[]) {
dest.clear();
for (int i = 0; i < ArraySize(src); ++ i)
dest.push_back(src[i]);
}
template <typename T>
void fill_vector(vector_fund<T> &dest, T val) {
for (uint i = 0; i < dest.size(); ++ i)
dest.a[i] = val;
}
class net
{ vector_ref<vector_fund<float>> w; // весовые коэффициенты (== это образцам)constuint n; // количество входов сетиfloat activation(float v) const {
return v>n?n:v<0?0:v;
}
public:
net(unsigned numInputs):n(numInputs){}
unsigned learnImage(constfloat &image[]) {
vector_fund<float> tmp;
fill_vector_from_array(tmp, image);
w.push_back(tmp);
return w.size();
}
unsigned recognizeImage(constfloat &image[]) const {
vector_fund<float> axons(this.w.size());
fill_vector<float>(axons, 0);
float sum1=.0, sum2=.0, e=0.95 f/w.size();
unsigned i,j;
vector_fund<float> image_vec;
fill_vector_from_array(image_vec, image);
for(i=0; i < w.size(); ++i) { // цикл инициализации сетиfor(j=0; j < n; ++j)
axons.a[i] += image_vec.a[j]*w.a[i].a[j];
sum1 += axons.a[i] = activation(0.5 f*(axons.a[i]+float(n) ) );
}
while( sum2 != sum1 ) { // цикл пока выходы сети изменяются
sum1 = 0.0 f * ( sum2 = sum1 );
for(i=0; i < w.size(); ++i)
sum1 += axons.a[i] = activation( axons.a[i]-e*(sum2-axons.a[i]) );
}
for(i=w.size()-1; i!=(uint)-1 && !axons.a[i--];); // поиск активного аксона сети return i;
}
};
unsigned fn() {
// создал несколько массивов, отказывается мкл передавать многомерные массивы.
float a1_0[15] = {1.,1.,1., 1.,-1.,-1., 1.,-1.,-1., 1.,-1.,-1., 1.,1.,1.}; // символ Сfloat a1_1[15] = {1.,1.,1., 1.,-1.,-1., 1.,1.,-1., 1.,-1.,-1., 1.,1.,1.}; // Символ Efloat a1_2[15] = {1.,1.,1., 1.,-1.,1., 1.,-1.,1., 1.,-1.,1., 1.,1.,1.}; // Символ Оfloat a1_3[15] = {1.,1.,1., 1.,-1.,1., 1.,-1.,1., 1.,-1.,1., 1.,1.,1.}; // искаженный
net n(15);
n.learnImage( a1_0 );
n.learnImage( a1_1 );
n.learnImage( a1_2 );
return n.recognizeImage( a1_3 );
}
voidOnStart()
{
Alert( fn() );
}
Ich will es nicht vermasseln und sicher sein, dass es nicht richtig funktioniert ))))
Um dies zu überprüfen, habe ich den Quellcode und den µl-Code getestet
Igor, ich glaube nicht, dass es sinnvoll ist, eine Deque zu schreiben, ein Vektor ist in den allermeisten Fällen ausreichend. Ich habe Ihr Beispiel mit dem Vektor aus dem Thread über stl neu geschrieben:
Um dies zu überprüfen, habe ich auf Pluses Quell- und µl-Code wie folgt ausgeführt
in beiden Fällen erhalten: 1 1 0 4294967295
HH: durch die Art und Weise, in den Quellcode zu sein schien ein Fehler - overrun Array (Genosse vergessen, -1 hinzufügen)
Zeiger auf ein Datenstück der Größe 4 oder 8 Byte.
Die Größe hängt wegen der Ausrichtung von der Plattform ab. Wenn Sie etwas wie pragma pack 1 verwenden, wird die Größe gleich sein (wahrscheinlich 1 Byte)
Manchmal schaue ich auch in VS C++, kompiliere im asm-Listing-Modus und schaue es mir dann an, dann wird vieles klar. Ja, es klingt beängstigend, aber asm ist die absolute Wahrheit in letzter Instanz. Und die Sprache ist nicht schwer zu verstehen. Es ist schwer, es richtig zu schreiben))
Ja, danke... wie man so schön sagt, ich wusste es, hatte es aber vergessen, da ich kein Programmierer bin und es selten mache :)
Ich möchte diesen Quellcode nach MQL portieren, aber ich bin nicht sicher, ob ich std::deque behandeln kann.
entnommen von hier:https://habr.com/ru/sandbox/43916/
SZZY: gegoogelt und keinen anderen Hamming-Quellcode gefunden, Links zu anderen Quellen sind willkommen (nicht das Hopfield-Netzwerk!!! - google gibt sie immer zusammen)
Ich möchte diesen Quellcode nach MQL portieren, aber ich bin nicht sicher, ob ich std::deque behandeln kann.
es ist eine bidirektionale Liste. der obige Code hat nur push_back so Chancen sind Sie es mit einem Vektor ersetzen können.
Wenn nicht, können Sie eine einfache Implementierung von deque über Array mit einer Reserve vom Anfang und Ende machen. in STL ist es irgendwie auf diese Weise implementiert.
Dies ist eine bidirektionale Liste. In dem obigen Code gibt es nur push_back, so dass es eine Chance, dass es durch einen Vektor ersetzt werden kann.
Falls nicht, können Sie eine einfache Implementierung von deque über Array mit Start- und Endredundanz durchführen.
Ich habe std::deque gegoogelt und es ist wie Sie schreiben, aber... Ich weiß nicht, wie ich es verwenden soll, und ersetze es einfach durch einen Vektor... Im Allgemeinen ist das Beispiel ein Tutorium, ich würde es nicht vermasseln wollen und sicher sein, dass es so ist, wie es falsch funktionieren soll ))))
ZS: Es gibt auch ein Beispiel in F# - aber ich denke, das ist zu viel ;)
Ich möchte diesen Quellcode nach MQL portieren, aber ich bin mir nicht sicher, ob ich std::Alert( n.recognizeImage( a1_3 ) ) handhaben kann;
entnommen von hier:https://habr.com/ru/sandbox/43916/
SZY: gegoogelt, dass ich nicht auf die Schnelle andere Hamming-Netzwerk-Quellen gefunden habe, Links zu anderen Quellen sind auch willkommen (es ist nicht net Hopfield!!! - google gibt sie immer zusammen)
Igor, ich glaube nicht, dass es sinnvoll ist, ein Deque zu schreiben, ein Vektor wird in den allermeisten Fällen ausreichen. Ich habe Ihr Beispiel mit einem Vektor aus dem Thread über stl neu geschrieben:
Ich will es nicht vermasseln und sicher sein, dass es nicht richtig funktioniert ))))
Um dies zu überprüfen, habe ich den Quellcode und den µl-Code getestet
in beiden Fällen erhalten: 1 1 0 4294967295
HH: Übrigens schien es einen Fehler im Quelltext zu geben - er ging über die Grenzen des Feldes hinaus (der Genosse vergaß, -1 hinzuzufügen)
Igor, ich glaube nicht, dass es sinnvoll ist, eine Deque zu schreiben, ein Vektor ist in den allermeisten Fällen ausreichend. Ich habe Ihr Beispiel mit dem Vektor aus dem Thread über stl neu geschrieben:
Um dies zu überprüfen, habe ich auf Pluses Quell- und µl-Code wie folgt ausgeführt
in beiden Fällen erhalten: 1 1 0 4294967295
HH: durch die Art und Weise, in den Quellcode zu sein schien ein Fehler - overrun Array (Genosse vergessen, -1 hinzufügen)
О! Das ging aber schnell! Danke HUMAN!!!