puntatore a un pezzo di dati di dimensione 4 o 8 byte.
La dimensione dipende dalla piattaforma a causa dell'allineamento. Se usate qualcosa come pragma pack 1, la dimensione sarà la stessa (1 byte probabilmente)
A volte guardo anche in VS C++, compilo in modalità asm listing e poi lo guardo, molto diventa chiaro. Sì, sembra spaventoso, ma l'asm è la verità assoluta in ultima istanza. E il linguaggio non è difficile da capire. È difficile scriverlo correttamente))
Это рекурсия просто. Быстрая сортировка как раз таки и применяет рекурсивный вызов функции. О принципах, преимуществах и недостатках ее использования можете почитать в интернете. И да, это применительно к любому ЯП. В кратце скажу, что главное требование рекурсии - это то, что бы последующий вызов рекурсии приближал алгоритм к завершению. Ну и главный недостаток это требование к оперативной памяти при большое обработке данных, так как каждый вызов такой рекурсии будет блокировать память.... Простой пример с рекурсией на том же си и нахождению факториала в 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: ho cercato su Google e non ho trovato nessun altro codice sorgente di Hamming, i link ad altre fonti sono benvenuti (non la rete Hopfield!!! - google li dà sempre insieme)
Voglio portare questo codice sorgente in MQL, ma non sono sicuro di poter gestire std::deque.
È una lista bidirezionale. il codice di cui sopra ha solo push_back quindi è possibile sostituirlo con un vettore.
se no, puoi fare una semplice implementazione di deque via array con una riserva dall'inizio e dalla fine. in STL è in qualche modo implementato in questo modo.
Questa è una lista bidirezionale. nel codice di cui sopra c'è solo push_back quindi c'è la possibilità che possa essere sostituito da un vettore.
In caso contrario, si può fare una semplice implementazione del deque tramite array con ridondanza di inizio e fine.
Ho cercato su Google std::deque ed è come scrivi tu, ma... Non so come usarlo, e sostituirlo solo con un vettore... In generale, l'esempio è un tutorial, non vorrei sbagliare ed essere sicuro che è il modo in cui dovrebbe funzionare sbagliato ))))
ZS: C'è anche un esempio in F# - ma penso che sia troppo ;)
HZZ: googlato, che non ho trovato al volo altre fonti della rete di Hamming, i link ad altre fonti sono anche benvenuti (non è Hopfield netto!!! - google li dà sempre insieme)
Igor, non credo che sia ragionevole scrivere un deque, un vettore sarà sufficiente nella stragrande maggioranza dei casi. Ho riscritto il tuo esempio usando un vettore dal thread su stl:
#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() );
}
Non voglio sbagliare ed essere sicuro che dovrebbe funzionare in modo improprio ))))
Per verificare questo, ho testato il codice sorgente e il codice µl
Igor, non credo che sia ragionevole scrivere un deque, un vettore è sufficiente nella stragrande maggioranza dei casi. Ho riscritto il tuo esempio usando il vettore dal thread su stl:
Per verificarlo, ho eseguito su plus il codice sorgente e µl come
in entrambi i casi ha ottenuto: 1 1 0 4294967295
HH: a proposito, nel codice sorgente sembrava esserci un errore - overrun array (il compagno ha dimenticato di aggiungere -1)
puntatore a un pezzo di dati di dimensione 4 o 8 byte.
La dimensione dipende dalla piattaforma a causa dell'allineamento. Se usate qualcosa come pragma pack 1, la dimensione sarà la stessa (1 byte probabilmente)
A volte guardo anche in VS C++, compilo in modalità asm listing e poi lo guardo, molto diventa chiaro. Sì, sembra spaventoso, ma l'asm è la verità assoluta in ultima istanza. E il linguaggio non è difficile da capire. È difficile scriverlo correttamente))
Sì, grazie... come si dice, lo sapevo ma l'ho dimenticato perché non sono un programmatore e lo faccio raramente :)
Voglio portare questo codice sorgente in MQL, ma non sono sicuro di poter gestire std::deque.
preso da qui:https://habr.com/ru/sandbox/43916/
SZZY: ho cercato su Google e non ho trovato nessun altro codice sorgente di Hamming, i link ad altre fonti sono benvenuti (non la rete Hopfield!!! - google li dà sempre insieme)
Voglio portare questo codice sorgente in MQL, ma non sono sicuro di poter gestire std::deque.
È una lista bidirezionale. il codice di cui sopra ha solo push_back quindi è possibile sostituirlo con un vettore.
se no, puoi fare una semplice implementazione di deque via array con una riserva dall'inizio e dalla fine. in STL è in qualche modo implementato in questo modo.
Questa è una lista bidirezionale. nel codice di cui sopra c'è solo push_back quindi c'è la possibilità che possa essere sostituito da un vettore.
In caso contrario, si può fare una semplice implementazione del deque tramite array con ridondanza di inizio e fine.
Ho cercato su Google std::deque ed è come scrivi tu, ma... Non so come usarlo, e sostituirlo solo con un vettore... In generale, l'esempio è un tutorial, non vorrei sbagliare ed essere sicuro che è il modo in cui dovrebbe funzionare sbagliato ))))
ZS: C'è anche un esempio in F# - ma penso che sia troppo ;)
Voglio portare questo codice sorgente in MQL, ma non sono sicuro di poter gestire std::Alert( n.recognizeImage( a1_3 ) );
preso da qui:https://habr.com/ru/sandbox/43916/
HZZ: googlato, che non ho trovato al volo altre fonti della rete di Hamming, i link ad altre fonti sono anche benvenuti (non è Hopfield netto!!! - google li dà sempre insieme)
Igor, non credo che sia ragionevole scrivere un deque, un vettore sarà sufficiente nella stragrande maggioranza dei casi. Ho riscritto il tuo esempio usando un vettore dal thread su stl:
Non voglio sbagliare ed essere sicuro che dovrebbe funzionare in modo improprio ))))
Per verificare questo, ho testato il codice sorgente e il codice µl
in entrambi i casi ha ottenuto: 1 1 0 4294967295
HH: a proposito, sembra che ci sia un errore nella fonte - andando fuori dai confini dell'array (il compagno ha dimenticato di aggiungere -1)
Igor, non credo che sia ragionevole scrivere un deque, un vettore è sufficiente nella stragrande maggioranza dei casi. Ho riscritto il tuo esempio usando il vettore dal thread su stl:
Per verificarlo, ho eseguito su plus il codice sorgente e µl come
in entrambi i casi ha ottenuto: 1 1 0 4294967295
HH: a proposito, nel codice sorgente sembrava esserci un errore - overrun array (il compagno ha dimenticato di aggiungere -1)
О! È stato così veloce! Grazie HUMAN!!!