PDA

View Full Version : سوال: انتخاب زبان برای پیاده سازی الگوریتم های فشرده سازی



بیتا حکمت
چهارشنبه 10 تیر 1394, 01:18 صبح
سلام ، من و دوستم قصد داریم برای تنوع و به علاوه یکم جاه طلبی ، روی الگوریتم های فشرده سازی کار کنیم . ( البته شرط بندی هم کردیم که کی راه بهتری پیدا می کنه :لبخند:)
یه نمونه برنامه ساده که با #C فایل رو به باینری تبدیل می کنه(منظورم اینکه فایل های
Exe رو به صورت صفر و یک در میاره) و بعد همون صفر و یک رو به دوباره به فایل اولیه برمی گردونه ، اجرا که می کنم با وجود اینکه فایل EXE حجم خیلی کمی داره ولی عملیات تبدیلش به کندی انجام میشه ،

مساله اول : برای همین میخوام بدونم اگر زبان رو تغییر بدم مثلا با ++C کار کنم ایا سرعت اجرا و تست همچین برنامه ای بیشتر میشه ؟! (پیشنهادتون C هست یا ++C )
لطفا" هر کدومو که پیشنهاد می دین یک لینک دانلود ابزار برنامه نویسی اش هم بزارین :لبخند:

مساله دوم : در حال حاضر بهترین برنامه فشرده ساز چند درصد می تونه فایل ها رو فشرده کنه ؟!

تو این ماه مبارک ، ما فقرای IT رو از سفره اطلاعاتی خودتون بی نصیب نزارین

pbm_soy
چهارشنبه 10 تیر 1394, 02:02 صبح
از سی شارپ که مطمئنا زبانها C/C++ بهتر است! ولی بین C/C++ فرق آنچنانی وجود ندارد کما اینکه در کامپایلرهای جدید C++ به هردو زبان C/C++ میتوانید بنویسید (درواقع C++ یک روش جدید برنامه نویسی است که اصلیترین ویژگی آن شئ گرای است) منظورتون از لینک ابزار چیست؟ منطورتون کامپایلرهاش است؟ یا کامپوننتهای برنامه نویسی است؟

بهترینی که من دیدم 7-Zip است هم از لحاظ سرعت و هم از لحاظ تعداد فرمتها و الگوریتمهای که پشتیبانی میکند و بالاترین درصد فشرده سازی را در آن دیدم البته به شرطی که بتونی درست تنظیمش کنی و منابع سخت افزاری و نرم افزاری موردنیازش را در اختیارش بذارید و البته open source هم هست به سایت www.7-zip.org مراجعه کنید

بیتا حکمت
چهارشنبه 10 تیر 1394, 02:03 صبح
از سی شارپ که مطمئنا زبانها C/C++‎ بهتر است! ولی بین C/C++‎ فرق آنچنانی وجود ندارد کما اینکه در کامپایلرهای جدید C++‎ به هردو زبان C/C++‎ میتوانید بنویسید (درواقع C++‎ یک روش جدید برنامه نویسی است که اصلیترین ویژگی آن شئ گرای است) منظورتون از لینک ابزار چیست؟ منطورتون کامپایلرهاش است؟ یا کامپوننتهای برنامه نویسی است؟

بهترینی که من دیدم 7-Zip است هم از لحاظ سرعت و هم از لحاظ تعداد فرمتها و الگوریتمهای که پشتیبانی میکند و بالاترین درصد فشرده سازی را در آن دیدم البته به شرطی که بتونی درست تنظیمش کنی و منابع سخت افزاری و نرم افزاری موردنیازش را در اختیارش بذارید و البته open source هم هست به سایت www.7-zip.org (http://www.7-zip.org) مراجعه کنید

منظورم کامپایلرش بود . ممنون بابت اطلاعاتی که دادین .

darknes666
چهارشنبه 10 تیر 1394, 02:07 صبح
منظورم کامپایلرش بود
خب برای C++‎‎ کامپایل که زیاده.من visual studio رو پیشنهاد میکنم که یه مقدار سنگینه.
در مور حد اکثر میزان فشرده سازی باید بگم که میزانش به فرمت فایل و حجمش بستگی داره.
فایل ها متنی اصولا بیش از 50درصد میتونین فشرده بشن که بهترین حالته اما فایل های گرافیکی و صوتی نمیتونن تا این حد فشرده شن.

amirtork
چهارشنبه 10 تیر 1394, 14:18 عصر
سلام.
برای فشرده سازی فایل ها، پیشنهاد میکنم الگوریتم UHARC رو مطالعه کنید، الگوریتم جالبی هست و درصد فشرده سازیش هم زیاد هست.
یه الگوریتم دیگه هم که باز هم الگوریتم جالبی هست، الگوریتم کدگذاری هافمن هست.
مطالعه ی این دو الگوریتم دید خوبی میده فکر کنم(هرچند احتمالا با هافمن آشنایی دارید.)
در مورد زبان هم، از اونجایی که در c++ میشه از c هم استفاده کرد، پیشنهاد میکنم از همون c++ استفاده کنید! برای چی از الطاف c++ محروم بمونید؟ :-D
IDE مناسب برای cpp هم Code:Blocks هست همچنین Qt creator و همونطور که دوستان اشاره کردن، ویژوال استدیو.
کامپایلر هم g++ رو پیشنهاد میکنم(MinGW نسخه ی ویندوزش هست)

بیتا حکمت
چهارشنبه 10 تیر 1394, 16:32 عصر
سلام.
برای فشرده سازی فایل ها، پیشنهاد میکنم الگوریتم UHARC رو مطالعه کنید، الگوریتم جالبی هست و درصد فشرده سازیش هم زیاد هست.
یه الگوریتم دیگه هم که باز هم الگوریتم جالبی هست، الگوریتم کدگذاری هافمن هست.
مطالعه ی این دو الگوریتم دید خوبی میده فکر کنم(هرچند احتمالا با هافمن آشنایی دارید.)
در مورد زبان هم، از اونجایی که در C++‎‎‎‎ میشه از c هم استفاده کرد، پیشنهاد میکنم از همون C++‎‎‎‎ استفاده کنید! برای چی از الطاف C++‎‎‎‎ محروم بمونید؟ :-D
IDE مناسب برای cpp هم Code:Blocks هست همچنین Qt creator و همونطور که دوستان اشاره کردن، ویژوال استدیو.
کامپایلر هم g++ رو پیشنهاد میکنم(MinGW نسخه ی ویندوزش هست)



ویژوال استودیو رو تو سیستم ام نصب هست . برنامه ++C که در ویژوال استودیو نوشته شده ، کندتر از IDE های دیگه اس ؟!
اجازه بدین یه سوال حاشه ای هم بپرسم ، برنامه ای ++C نوشته شده در ویژوال استودیو هم برای اجرا شدن نیازمند
فریم نت ورک هستن (مثل EXE هایی که با سی شارپ ساخته میشن ؟!)

در مورد الگوریتم ها چشم ، حتما" تحقیق می کنم ، راستی آدرس اون سایتی که به بهترین الگوریتم جایزه می ده دارین ؟:لبخند:

amirtork
چهارشنبه 10 تیر 1394, 16:57 عصر
ویژوال استودیو رو تو سیستم ام نصب هست . برنامه ++C که در ویژوال استودیو نوشته شده ، کندتر از IDE های دیگه اس ؟!
اجازه بدین یه سوال حاشه ای هم بپرسم ، برنامه ای ++C نوشته شده در ویژوال استودیو هم برای اجرا شدن نیازمند
فریم نت ورک هستن (مثل EXE هایی که با سی شارپ ساخته میشن ؟!)

در مورد الگوریتم ها چشم ، حتما" تحقیق می کنم ، راستی آدرس اون سایتی که به بهترین الگوریتم جایزه می ده دارین ؟:لبخند:

سرعت برنامه ارتباطی به IDE نداره، بستگی به الگوریتم مورد استفاده و زمانی که میبره تا اون پروسه ها انجام بشه داره. بنابراین سرعت انجام برنامه ها ی نوشته شده در IDE های مختلف یکسان خواهد بود ( پس از کامپایل)
در مورد سوالتون، اگر برنامه تون رو به صورت c++/CLI بنویسید به .NET framework احتیاج پیدا میکنید، اما اگر از c++ به صورت استاندارد استفاده کنید، لزومی به داشتن دات نت ندارید، اگر دات نت رو برای طراحی رابط کاربری لازم دارید، میتونید به جاش از Qt یا WxWidget استفاده کنید.

pbm_soy
پنج شنبه 11 تیر 1394, 03:31 صبح
اگه بخواهید بحث فریم ورک با به این قضیه اضافه کنید نتیجه کارتون فرق آنچنانی با نتیجه کار سی شارپ نخواهد داشت

وقتی حرف از C/C++ به میان میاد منظور دوستان همان C/C++ استاندارد که فایل EXE آن نیاز به چیزی ندارد و مستقلا اجرا میشود (مستقل از IDE)
خوبی C/C++ اینه که در آینده اگر خواستید برنامه را در لینوکس یا جای دیگه اجرا کنید فقط کافیست در آن سیستم عامل یک کامپایلر C/C++ پیدا کنید و برای آن سیستم عامل کامپایل کنید حالا فایل اجرائی آنرا میتوانید تقریبا در همه توزیعهای آن سیستم عامل اجرا کنید

asdasd123123
پنج شنبه 11 تیر 1394, 06:28 صبح
"نتیجه کارتون فرق آنچنانی با نتیجه کار سی شارپ نخواهد داشت"
:دی
"مستقلا اجرا میشود (مستقل از IDE)"
:دی

rahnema1
پنج شنبه 11 تیر 1394, 06:52 صبح
سلام
شما با همون سی شارپ می تونید برنامه را بنویسید. همین دات نت فریمورک را مگه با چی نوشتن؟ اکثر کدها و الگوریتمهای موجود در اون از قبیل فشرده سازی مو جود در System.IO.Compression و رمز نگاری و ... با دات نت نوشته شده و سرعت خوبی هم داره گر چه بعضی جاها از تابعهای api استفاده شده
حالا شما همین برنامه ای که برای تبدیل به صفر و یک نوشتیداینجا بذارید تا دوستان بررسی کنند شاید از امکانات زبان سی شارپ به خوبی استفاده نکرده باشید
درسته سرعت ++c به علت بهینه سازی بهتر در زمان کامپایل بیشتره اما کامپایلر سی شارپ هم کد را تا جایی که امکان داره بهینه سازی انجام میده

بیتا حکمت
پنج شنبه 11 تیر 1394, 08:36 صبح
"نتیجه کارتون فرق آنچنانی با نتیجه کار سی شارپ نخواهد داشت"
:دی
"مستقلا اجرا میشود (مستقل از IDE)"
:دی


سلام
شما با همون سی شارپ می تونید برنامه را بنویسید. همین دات نت فریمورک را مگه با چی نوشتن؟ اکثر کدها و الگوریتمهای موجود در اون از قبیل فشرده سازی مو جود در System.IO.Compression و رمز نگاری و ... با دات نت نوشته شده و سرعت خوبی هم داره گر چه بعضی جاها از تابعهای api استفاده شده
حالا شما همین برنامه ای که برای تبدیل به صفر و یک نوشتیداینجا بذارید تا دوستان بررسی کنند شاید از امکانات زبان سی شارپ به خوبی استفاده نکرده باشید
درسته سرعت ++c به علت بهینه سازی بهتر در زمان کامپایل بیشتره اما کامپایلر سی شارپ هم کد را تا جایی که امکان داره بهینه سازی انجام میده

کدی که در #C برای تبدیل استفاده می کنم



byte[] allByte = System.IO.File.ReadAllBytes(@"C:\Rar.exe");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < allByte.Length; i++)
sb.Append(Convert.ToString(allByte[i], 2).PadLeft(8, '0'));
txt.Text = sb.ToString();




و برگردوندن فایل به حالت اولیه اش


string strAllByte = txt.Text;
byte[] allByteNew = new byte[strAllByte.Length / 8];
for (int i = 0; i < strAllByte.Length; i+=8)
{
string t = strAllByte.Substring(i, 8);
allByteNew[i / 8] = Convert.ToByte(t, 2);
}
System.IO.File.WriteAllBytes(@"C:\Rar1.exe", allByteNew);

حامد مصافی
پنج شنبه 11 تیر 1394, 09:56 صبح
نکته یکم: برای باز کردن فایل تمام داده‌های اونو یکجا نخونید، خط به خط بخونید.

نکته دوم: تا زمانی که روش نامناسبی در پیش گرفته‌اید تغییر زبان کمکی نمی‌کند.

نکته سوم: الگوریتم‌های فشرده‌سازی بسیار پیچیده هستند، اینطور که پیداست در کار شما نیست!


پی‌نوشت: این تاپیک تا اینجای کار دربرگیرنده محتوای علمی نیست. اگر سایر تاپیک‌ها نیز به همین صورت باشند مجبورم قفلش کنم!

بیتا حکمت
پنج شنبه 11 تیر 1394, 11:27 صبح
نکته یکم: برای باز کردن فایل تمام داده‌های اونو یکجا نخونید، خط به خط بخونید.

نکته دوم: تا زمانی که روش نامناسبی در پیش گرفته‌اید تغییر زبان کمکی نمی‌کند.

نکته سوم: الگوریتم‌های فشرده‌سازی بسیار پیچیده هستند، اینطور که پیداست در کار شما نیست!


پی‌نوشت: این تاپیک تا اینجای کار دربرگیرنده محتوای علمی نیست. اگر سایر تاپیک‌ها نیز به همین صورت باشند مجبورم قفلش کنم!

سلام

از انجایی که مشکل استارتر حل شد ، اسپم حلال است : دی


در مورد نکته اول : ممنونم که تذکر دادین همین کارو انجام می دم !

نکته دوم : در طول مسیر انجام کار ، در مورد روش ها تحقیق می کنم تا بهترین روش رو پیدا کنم

نکته سوم : من تو این کار با دوستی همکاری می کنم ! من که در این زمینه معلوماتم به صفر میل می کنه ، و ایشون هم از من بدتره ،
با در نظر گرفتن این نکته ، اگر شما اطمینان دارید که انجام این کار از عهده من و دوستم خارج هست ، باهم یه شرط ساده ببندیم
مثلا" می تونیم شرط ببنیدم اگر ما موفق شدیم برنامه ای بنویسم که صرف از نظر از نوع فایل ، اون فایل رو تا 70 درصد فشرده کنه
شما از مدیریت این سایت استعفا بدین و از دنیای برنامه نویسی خداحافظی کنین !
اگر هم ما تا 6 ماه دیگه به نتیجه نرسیدیم ، من دیگه این سایت نمیام !
حیف که شرط بندی سر پول حرامه، وگرنه سیستم شرط بندی دیگه در نظر می گفتم
البته برای من هیجان انگیز تر اینکه یه کاری کنم شما دیگه این سایت تشریف نیارین :لبخند:

من تمام جواب هایی رو که برای گام اول لازم داشتم به لطف راهنمایی دوستان و حتی شما پیدا کردم ، اگر باز بودن تاپیک اذیت اتون می کنه
می تونین ببندینش . ولی خوشحال میشم قبل از بستن تاپیک ، تو پست نهایی اعلام کنین با شرط بندی یاد شده موافقین یا نه :لبخند:

حامد مصافی
پنج شنبه 11 تیر 1394, 11:58 صبح
کاربر گرامی،
شما ورداشتین یه فایل بایناری رو تبدیل به رشته‌ای از صفر و یک کردین. هر بایت رو تبدیل به ۸ بایت کردین. حجم فایل رو ۸ برابر کردین. به اندازه ۹ برابر حجم فایل حافظه رم اشغال کردین. حالا دم از فشرده‌سازی میزنین؟ اونم بدون در نظر گرفتن نوع فایل؟ در صورتی که همه الگوریتم‌های فشرده‌سازی مستقیما به نوع فایل و چیدمان اطلاعاتی اون وابسته‌اند.
اگر ذره‌ای از فشرده‌سازی یا حتی برنامه‌نویسی سر در میاوردین چنین ادعایی نمیکردین، فشرده سازی ۷۰درصد! شما ۲درصد فشرده کن مابقی پیشکش! ۶ ماه که سهله. از الان تا ۱۰ سال زمان دارین.
اینم شرط بندی نیست! شما نیاین سایت نفعی برای من نداره.
شما از الان تا هر زمان که بخواهید زمان دارید. شروع به نوشتن کنید. هر موقع تموم شد می‌تونید با افتخار خروجی نهایی رو در همین فاروم قرار بدید.
اما تا اون موقع از ارسال اسپم خودداری کنید.

پی‌نوشت: این تاپیک به دلیل فقدان محتوای علمی قفل می‌شود.